基于python開發(fā)文件常見處理工具
1. 直接食用代碼
1.1 讀文件
讀取文件中內(nèi)容
# 讀取文件內(nèi)容 file_path: 文件路徑 def read_file(file_path): # 打開文件 with open(file_path, 'r', encoding='utf-8') as f: # 讀取文件內(nèi)容 content = f.read() # 返回文件內(nèi)容 return content
1.2 寫文件
將內(nèi)容寫到文件中
# 將內(nèi)容寫入文件 file_path: 文件路徑, content: 文件內(nèi)容 def write_file(file_path, content): # 創(chuàng)建文件 with open(file_path, 'w', encoding='utf-8') as f: # 寫入內(nèi)容 f.write(content) # 關(guān)閉文件 f.close()
1.3 獲取文件后綴
判斷文件是否為壓縮文件
import os # 判斷文件是否為壓縮文件 file_path 文件路徑 def is_pack(file_path): # 獲取文件擴(kuò)展名 ext = os.path.splitext(file_path)[1].lower() # 判斷文件擴(kuò)展名 if ext in ['.zip', '.rar', '.7z']: # 是壓縮文件則返回True return True
1.4 打包文件(壓縮)
壓縮文件
import os import zipfile # 將指定文件夾打包為 zip 文件 folder_path: 待壓縮文件夾路徑, output_path: 壓縮文件保存路徑 def zip_folder(folder_path, output_path): # folder_path: 要打包的文件夾路徑 # output_path: 輸出的 zip 文件路徑 # 創(chuàng)建 zip 文件 with zipfile.ZipFile(output_path, 'w', zipfile.ZIP_DEFLATED) as zip_file: # 遍歷文件夾 for root, dirs, files in os.walk(folder_path): for file in files: # 獲取文件絕對(duì)路徑 file_path = os.path.join(root, file) # 獲取文件在zip文件中的相對(duì)路徑 reletive_path = os.path.relpath(file_path, folder_path) # 添加文件到zip文件中 zip_file.write(file_path, os.path.relpath(file_path, folder_path))
1.5 解壓
解壓縮文件
import subprocess import os import zipfile # 解壓縮文件 filepath: 壓縮文件路徑, target_folder: 解壓目標(biāo)路徑 def unpack(filepath, target_folder): # 以上注釋代碼的整合 目的為了獲取壓縮包文件名(不帶后綴) file_name_pre = os.path.splitext(os.path.basename(filepath))[0] print("filepath----> ",filepath) print("file_name_pre----> ",file_name_pre) print("target_folder----> ",target_folder) # target_folder = os.path.join(target_folder, file_name_pre) # 本地winrar命令集成 command = [ # 本地WinRAR.exe文件路徑 'C:\\Program Files\\WinRAR\\WinRAR.exe', # 解壓并保留完整目錄結(jié)構(gòu) 'x', # 傳入源RAR文件的絕對(duì)路徑(引號(hào)包裹,防止路徑中有空格) os.path.abspath(filepath), # 目標(biāo)目錄(確保路徑以一個(gè)反斜杠結(jié)束,否則WinRAR會(huì)出錯(cuò)),如果該參數(shù)省略,則會(huì)默認(rèn)為當(dāng)前目錄 target_folder.rstrip('\\') + '\\', # 覆蓋已存在的文件 '-o+', # 將壓縮包名稱作為子目錄添加到目標(biāo)路徑中,如果添加該參數(shù),則壓縮包名稱會(huì)作為子目錄添加到目標(biāo)路徑中,產(chǎn)生兩層一樣的目錄 # '-ad', # 后臺(tái)運(yùn)行 # '-ibck', # 自動(dòng)確認(rèn)所有提示 '-y' ] print("正在執(zhí)行命令:", " ".join(command)) # 運(yùn)行命令 subprocess本身會(huì)處理空格問題 result = subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) print("命令執(zhí)行完畢") # 因?yàn)榻鈮汉蟮哪夸浭亲幽夸洠手付夸洖榻鈮汉蟮哪夸洠?即文件均在下面這個(gè)文件目錄中 target_folder = target_folder+"\\"+file_name_pre print('target_folder2:',target_folder)
1.6 遍歷文件夾
獲取文件夾中所有文件列表
import os # 遍歷文件夾,獲取文件夾下所有文件列表 folder_path: 文件夾路徑 def iteration_folder(folder_path): # 獲取目標(biāo)目錄下的所有文件路徑 # 定義一個(gè)空列表,用于存儲(chǔ)所有文件路徑 file_list = [] # 遍歷指定目錄下的所有文件和子目錄 for root, dirs, files in os.walk(folder_path): # 遍歷文件 for file in files: print('file---> ',file) # 獲取文件路徑 file_path = os.path.join(root, file) # 將文件路徑添加到列表中 file_list.append(file_path) print('----------> file_list:',file_list) # 返回文件列表 return file_list
2. 完整詳解代碼及示例演示
2.1 完整代碼
file_utils.py
# python 工具 判斷是否為壓縮文件、讀取文件、寫文件、解壓縮、遍歷獲取文件夾下所有文件 # 所需引入的庫(kù) import subprocess import os import zipfile # 讀取文件內(nèi)容 file_path: 文件路徑 def read_file(file_path): # 打開文件 with open(file_path, 'r', encoding='utf-8') as f: # 讀取文件內(nèi)容 content = f.read() # 返回文件內(nèi)容 return content # 將內(nèi)容寫入文件 file_path: 文件路徑, content: 文件內(nèi)容 def write_file(file_path, content): # 創(chuàng)建文件 with open(file_path, 'w', encoding='utf-8') as f: # 寫入內(nèi)容 f.write(content) # 關(guān)閉文件 f.close() # 判斷文件是否為壓縮文件 file_path 文件路徑 def is_pack(file_path): # 獲取文件擴(kuò)展名 ext = os.path.splitext(file_path)[1].lower() # 判斷文件擴(kuò)展名 if ext in ['.zip', '.rar', '.7z']: # 是壓縮文件則返回True return True # 將指定文件夾打包為 zip 文件 folder_path: 待壓縮文件夾路徑, output_path: 壓縮文件保存路徑 def zip_folder(folder_path, output_path): # folder_path: 要打包的文件夾路徑 # output_path: 輸出的 zip 文件路徑 # 創(chuàng)建 zip 文件 with zipfile.ZipFile(output_path, 'w', zipfile.ZIP_DEFLATED) as zip_file: # 遍歷文件夾 for root, dirs, files in os.walk(folder_path): for file in files: # 獲取文件絕對(duì)路徑 file_path = os.path.join(root, file) # 獲取文件在zip文件中的相對(duì)路徑 reletive_path = os.path.relpath(file_path, folder_path) # 添加文件到zip文件中 zip_file.write(file_path, os.path.relpath(file_path, folder_path)) # 解壓縮文件 filepath: 壓縮文件路徑, target_folder: 解壓目標(biāo)路徑 def unpack(filepath, target_folder): # 以上注釋代碼的整合 目的為了獲取壓縮包文件名(不帶后綴) file_name_pre = os.path.splitext(os.path.basename(filepath))[0] print("filepath----> ",filepath) print("file_name_pre----> ",file_name_pre) print("target_folder----> ",target_folder) # target_folder = os.path.join(target_folder, file_name_pre) # 本地winrar命令集成 command = [ # 本地WinRAR.exe文件路徑 'C:\\Program Files\\WinRAR\\WinRAR.exe', # 解壓并保留完整目錄結(jié)構(gòu) 'x', # 傳入源RAR文件的絕對(duì)路徑(引號(hào)包裹,防止路徑中有空格) os.path.abspath(filepath), # 目標(biāo)目錄(確保路徑以一個(gè)反斜杠結(jié)束,否則WinRAR會(huì)出錯(cuò)),如果該參數(shù)省略,則會(huì)默認(rèn)為當(dāng)前目錄 target_folder.rstrip('\\') + '\\', # 覆蓋已存在的文件 '-o+', # 將壓縮包名稱作為子目錄添加到目標(biāo)路徑中,如果添加該參數(shù),則壓縮包名稱會(huì)作為子目錄添加到目標(biāo)路徑中,產(chǎn)生兩層一樣的目錄 # '-ad', # 后臺(tái)運(yùn)行 # '-ibck', # 自動(dòng)確認(rèn)所有提示 '-y' ] print("正在執(zhí)行命令:", " ".join(command)) # 運(yùn)行命令 subprocess本身會(huì)處理空格問題 result = subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) print("命令執(zhí)行完畢") # 因?yàn)榻鈮汉蟮哪夸浭亲幽夸?,故指定目錄為解壓后的目錄?即文件均在下面這個(gè)文件目錄中 target_folder = target_folder+"\\"+file_name_pre print('target_folder2:',target_folder) # 遍歷文件夾,獲取文件夾下所有文件列表 folder_path: 文件夾路徑 def iteration_folder(folder_path): # 獲取目標(biāo)目錄下的所有文件路徑 # 定義一個(gè)空列表,用于存儲(chǔ)所有文件路徑 file_list = [] # 遍歷指定目錄下的所有文件和子目錄 for root, dirs, files in os.walk(folder_path): # 遍歷文件 for file in files: print('file---> ',file) # 獲取文件路徑 file_path = os.path.join(root, file) # 將文件路徑添加到列表中 file_list.append(file_path) print('----------> file_list:',file_list) # 返回文件列表 return file_list if __name__ == '__main__': # 1. 讀取文件內(nèi)容 print("<--------文件讀取測(cè)試--------> ") content = read_file(r'D:\重載\TEST2ZIP\TEST2ZIP\test1.txt') print("content----> ",content) # 2. 寫入文件內(nèi)容 write_file(r'D:\重載\TEST2ZIP\TEST2ZIP\test4.txt',content) # 3. 檢測(cè)文件是否為壓縮文件 print("<--------判斷類型是否為壓縮包--------> ") is_zip1 = is_pack(r'D:\重載\TEST2ZIP\TEST2ZIP\test1.txt') print('----------> is_zip1:',is_zip1) is_zip2 = is_pack(r'D:\重載\TEST2ZIP\TEST2ZIP.rar') print('----------> is_zip2:',is_zip2) # 特殊測(cè)試,該文件不存在,同樣可以得到結(jié)果 is_zip3 = is_pack(r'D:\重載\TEST2ZIP\TEST2ZIP\test1.zip') print('----------> is_zip3:',is_zip3) # 4. 解壓縮文件 print("<--------判斷類型是否為壓縮包--------> ") unpack(r'D:\重載\TEST2ZIP\TEST2ZIP.rar', r'D:\重載\TEST2ZIP\rar_test') # 5. 壓縮文件 # print("<--------判斷類型是否為壓縮包--------> ") # 6. 獲取指定目錄下的所有文件 # print("<--------判斷類型是否為壓縮包--------> ")
2.2 示例演示
2.2.1 讀文件
執(zhí)行代碼,輸出讀取結(jié)果
如圖
2.2.2 寫文件
執(zhí)行代碼,查看結(jié)果
指定位置查看是否生成文件
2.2.3 獲取文件后綴
判斷文件是否為壓縮包
執(zhí)行代碼,查看結(jié)果
2.2.4 解壓文件
執(zhí)行代碼,查看指定目錄是否有解壓后的文件
結(jié)果如下
注意,這里解壓縮后的目錄是子目錄,即指定目錄下會(huì)生成一個(gè)子目錄存放文件
2.2.5 壓縮文件
執(zhí)行代碼查看結(jié)果
如圖壓縮文件生成
2.2.6 遍歷文件夾
獲取文件夾中所有文件的列表
執(zhí)行代碼,查看結(jié)果
對(duì)比文件夾目錄中的文件
到此這篇關(guān)于基于python開發(fā)文件常見處理工具的文章就介紹到這了,更多相關(guān)python文件處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python逐像素獲取柵格經(jīng)緯度分別保存在兩個(gè)矩陣中(代碼收藏)
這篇文章主要介紹了python逐像素獲取柵格經(jīng)緯度分別保存在兩個(gè)矩陣中的實(shí)現(xiàn)示例,建議收藏代碼總會(huì)用到,有需要的朋友可以借鑒參考下,希望能夠有所幫助2024-01-01解決Pandas生成Excel時(shí)的sheet問題的方法總結(jié)
估計(jì)有不少小伙伴在將 DataFrame導(dǎo)入到Excel的時(shí)候,遇到過下面這種尷尬的情況:想給一個(gè)現(xiàn)有的Excel文件追加一個(gè)sheet,結(jié)果發(fā)現(xiàn)其它的sheet都沒了等,本文就來告訴你如何解決這些問題2022-08-08Python中shutil模塊的學(xué)習(xí)筆記教程
shutil模塊是一種高層次的文件操作工具,類似于高級(jí)API,主要強(qiáng)大之處在于其對(duì)文件的復(fù)制與刪除操作更是比較支持好。下面這篇文章主要介紹了Python中shutil模塊的相關(guān)教程,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。2017-04-04關(guān)于DataFrame取值操作總結(jié)(取指定列指定值的行)
這篇文章主要介紹了關(guān)于DataFrame取值操作總結(jié)(取指定列指定值的行),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12Python 進(jìn)程操作之進(jìn)程間通過隊(duì)列共享數(shù)據(jù),隊(duì)列Queue簡(jiǎn)單示例
這篇文章主要介紹了Python 進(jìn)程操作之進(jìn)程間通過隊(duì)列共享數(shù)據(jù),隊(duì)列Queue,結(jié)合實(shí)例形式分析了Python進(jìn)程數(shù)據(jù)共享、隊(duì)列數(shù)據(jù)處理相關(guān)操作技巧,需要的朋友可以參考下2019-10-10Python Pexpect庫(kù)的簡(jiǎn)單使用方法
這篇文章主要介紹了Python Pexpect庫(kù)的簡(jiǎn)單使用方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01Jupyter?notebook無(wú)法鏈接內(nèi)核、運(yùn)行代碼問題
文章主要介紹了在VSCode中使用Jupyter?Notebook遇到的問題及其解決過程,問題包括包版本沖突、文件沖突、路徑錯(cuò)誤和找不到文件,通過逐一排查和安裝相關(guān)依賴包,最終解決了這些問題,使得Jupyter?Notebook可以在VSCode中正常運(yùn)行2025-02-02用Python自動(dòng)清理電腦內(nèi)重復(fù)文件,只要10行代碼(自動(dòng)腳本)
這篇文章主要介紹了用Python自動(dòng)清理電腦內(nèi)重復(fù)文件,只要10行代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01