1 優雅的獲取文件後綴名程序員
import os file_ext = os.path.splitext('./data/py/test.py') front,ext = file_ext In [5]: front Out[5]: './data/py/test' In [6]: ext Out[6]: '.py'
2 批量修改文件後綴編程
本例子使用Python的os
模塊和 argparse
模塊,將工做目錄work_dir
下全部後綴名爲old_ext
的文件修改成後綴名爲new_ext
app
經過本例子,你們將會大概清楚argparse
模塊的主要用法。ide
導入模塊函數
import argparse import os
定義腳本參數工具
def get_parser(): parser = argparse.ArgumentParser( description='工做目錄中文件後綴名修改') parser.add_argument('work_dir', metavar='WORK_DIR', type=str, nargs=1, help='修改後綴名的文件目錄') parser.add_argument('old_ext', metavar='OLD_EXT', type=str, nargs=1, help='原來的後綴') parser.add_argument('new_ext', metavar='NEW_EXT', type=str, nargs=1, help='新的後綴') return parser
後綴名批量修改性能
def batch_rename(work_dir, old_ext, new_ext): """ 傳遞當前目錄,原來後綴名,新的後綴名後,批量重命名後綴 """ for filename in os.listdir(work_dir): # 獲取獲得文件後綴 split_file = os.path.splitext(filename) file_ext = split_file[1] # 定位後綴名爲old_ext 的文件 if old_ext == file_ext: # 修改後文件的完整名稱 newfile = split_file[0] + new_ext # 實現重命名操做 os.rename( os.path.join(work_dir, filename), os.path.join(work_dir, newfile) ) print("完成重命名") print(os.listdir(work_dir))
實現Main測試
def main(): """ main函數 """ # 命令行參數 parser = get_parser() args = vars(parser.parse_args()) # 從命令行參數中依次解析出參數 work_dir = args['work_dir'][0] old_ext = args['old_ext'][0] if old_ext[0] != '.': old_ext = '.' + old_ext new_ext = args['new_ext'][0] if new_ext[0] != '.': new_ext = '.' + new_ext batch_rename(work_dir, old_ext, new_ext)
3 從路徑中提取文件ui
In [11]: import os ...: file_ext = os.path.split('./data/py/test.py') ...: ipath,ifile = file_ext ...: In [12]: ipath Out[12]: './data/py' In [13]: ifile Out[13]: 'test.py'
4 查找指定後綴名的文件spa
import os def find_file(work_dir,extension='jpg'): lst = [] for filename in os.listdir(work_dir): print(filename) splits = os.path.splitext(filename) ext = splits[1] # 拿到擴展名 if ext == '.'+extension: lst.append(filename) return lst r = find_file('.','md') print(r) # 返回全部目錄下的md文件
5 批量轉換xls文件爲xlsx
#批量轉換文件xls-xlsx import win32com.client as win32 import os.path import os def xls2xlsx(): rootdir = r"C:\Users\CQ375\Desktop\temp1" #須要轉換的xls文件存放處 rootdir1 = r"C:\Users\CQ375\Desktop\ex" #轉換好的xlsx文件存放處 files = os.listdir(rootdir) #列出xls文件夾下的全部文件 num = len(files) #列出全部文件的個數 for i in range(num): #按文件個數執行次數 kname = os.path.splitext(files[i])[1] #分離文件名與擴展名,返回(f_name, f_extension)元組 if kname == '.xls': #斷定擴展名是否爲xls,屏蔽其它文件 fname = rootdir + '\\' + files[i] #合成須要轉換的路徑與文件名 fname1 = rootdir1 + '\\' + files[i] #合成準備存放轉換好的路徑與文件名 excel = win32.gencache.EnsureDispatch('Excel.Application') #調用win32模塊 wb = excel.Workbooks.Open(fname) #打開須要轉換的文件 wb.SaveAs(fname1+"x", FileFormat=51) #文件另存爲xlsx擴展名的文件 wb.Close() excel.Application.Quit() if __name__ == '__main__': xls2xlsx()
6 目錄下全部文件的修改時間
import os import datetime print(f"當前時間:{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") for root,dirs,files in os.walk(r"D:\works"):#循環D:\works目錄和子目錄 for file in files: absPathFile=os.path.join(root,file) modefiedTime=datetime.datetime.fromtimestamp(os.path.getmtime(absPathFile)) now=datetime.datetime.now() diffTime=now-modefiedTime if diffTime.days<20:#條件篩選超過指定時間的文件 print(f"{absPathFile:<27s}修改時間[{modefiedTime.strftime('%Y-%m-%d %H:%M:%S')}]\ 距今[{diffTime.days:3d}天{diffTime.seconds//3600:2d}時{diffTime.seconds%3600//60:2d}]")#打印相關信息
7 批量壓縮文件夾和文件
import zipfile # 導入zipfile,這個是用來作壓縮和解壓的Python模塊; import os import time def batch_zip(start_dir): start_dir = start_dir # 要壓縮的文件夾路徑 file_news = start_dir + '.zip' # 壓縮後文件夾的名字 z = zipfile.ZipFile(file_news, 'w', zipfile.ZIP_DEFLATED) for dir_path, dir_names, file_names in os.walk(start_dir): # 這一句很重要,不replace的話,就從根目錄開始複製 f_path = dir_path.replace(start_dir, '') f_path = f_path and f_path + os.sep # 實現當前文件夾以及包含的全部文件的壓縮 for filename in file_names: z.write(os.path.join(dir_path, filename), f_path + filename) z.close() return file_news batch_zip('./data/ziptest')
8 文件讀操做
import os # 建立文件夾 def mkdir(path): isexists = os.path.exists(path) if not isexists: os.mkdir(path) # 讀取文件信息 def openfile(filename): f = open(filename) fllist = f.read() f.close() return fllist # 返回讀取內容
9 文件寫操做
# 寫入文件信息 # example1 # w寫入,若是文件存在,則清空內容後寫入,不存在則建立 f = open(r"./data/test.txt", "w", encoding="utf-8") print(f.write("測試文件寫入")) f.close # example2 # a寫入,文件存在,則在文件內容後追加寫入,不存在則建立 f = open(r"./data/test.txt", "a", encoding="utf-8") print(f.write("測試文件寫入")) f.close # example3 # with關鍵字系統會自動關閉文件和處理異常 with open(r"./data/test.txt", "w") as f: f.write("hello world!")
10 分詞並保存文件
pkuseg
是北大開源的一箇中文分詞工具包,它在多個分詞數據集上都有很是高的分詞準確率,比常常使用的jieba
分詞性能和效果要更好。
下面使用pkuseg
的cut
函數,分詞後統計前10頻率詞,並按照全部詞的頻次由高到低寫入到文件cut_words.csv
中。
這是須要切分的段落:
mystr = """Python 語言參考 描述了 Python 語言的具體語法和語義, 這份庫參考則介紹了與 Python 一同發行的標準庫。 它還描述了一般包含在 Python 發行版中的一些可選組件。 Python 標準庫很是龐大,所提供的組件涉及範圍十分普遍, 正如如下內容目錄所顯示的。這個庫包含了多個內置模塊 (以 C 編寫), Python 程序員必須依靠它們來實現系統級功能, 例如文件 I/O,此外還有大量以 Python 編寫的模塊, 提供了平常編程中許多問題的標準解決方案。 其中有些模塊通過專門設計, 經過將特定平臺功能抽象化爲平臺中立的 API 來鼓勵和增強 Python 程序的可移植性。 Windows 版本的 Python 安裝程序一般包含整個標準庫, 每每還包含許多額外組件。對於類 Unix 操做系統, Python 一般會分紅一系列的軟件包, 所以可能須要使用操做系統所提供的包管理工具來獲取部分或所有可選組件。"""
幾行代碼就完成上述工做:
from pkuseg import pkuseg from collections import Counter seg = pkuseg() words = seg.cut(mystr) frequency_sort = Counter(words).most_common() with open('./data/cut_words.csv', 'w') as f: for line in frequency_sort: f.write(str(line[0])+',' + str(line[1])+"\n") print('writing done')
出現最高頻的前10個詞語:
Counter(words).most_common(10) # [('的', 12), (',', 11), ('Python', 10), ('。', 7), ('了', 5), ('包含', 4), ('組件', 4), ('標準庫', 3), ('一般', 3), ('所', 3)]