基于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)
# 關閉文件
f.close()
1.3 獲取文件后綴
判斷文件是否為壓縮文件
import os
# 判斷文件是否為壓縮文件 file_path 文件路徑
def is_pack(file_path):
# 獲取文件擴展名
ext = os.path.splitext(file_path)[1].lower()
# 判斷文件擴展名
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:
# 獲取文件絕對路徑
file_path = os.path.join(root, file)
# 獲取文件在zip文件中的相對路徑
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: 解壓目標路徑
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文件的絕對路徑(引號包裹,防止路徑中有空格)
os.path.abspath(filepath),
# 目標目錄(確保路徑以一個反斜杠結(jié)束,否則WinRAR會出錯),如果該參數(shù)省略,則會默認為當前目錄
target_folder.rstrip('\\') + '\\',
# 覆蓋已存在的文件
'-o+',
# 將壓縮包名稱作為子目錄添加到目標路徑中,如果添加該參數(shù),則壓縮包名稱會作為子目錄添加到目標路徑中,產(chǎn)生兩層一樣的目錄
# '-ad',
# 后臺運行
# '-ibck',
# 自動確認所有提示
'-y'
]
print("正在執(zhí)行命令:", " ".join(command))
# 運行命令 subprocess本身會處理空格問題
result = subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
print("命令執(zhí)行完畢")
# 因為解壓后的目錄是子目錄,故指定目錄為解壓后的目錄, 即文件均在下面這個文件目錄中
target_folder = target_folder+"\\"+file_name_pre
print('target_folder2:',target_folder)
1.6 遍歷文件夾
獲取文件夾中所有文件列表
import os
# 遍歷文件夾,獲取文件夾下所有文件列表 folder_path: 文件夾路徑
def iteration_folder(folder_path):
# 獲取目標目錄下的所有文件路徑
# 定義一個空列表,用于存儲所有文件路徑
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 工具 判斷是否為壓縮文件、讀取文件、寫文件、解壓縮、遍歷獲取文件夾下所有文件
# 所需引入的庫
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)
# 關閉文件
f.close()
# 判斷文件是否為壓縮文件 file_path 文件路徑
def is_pack(file_path):
# 獲取文件擴展名
ext = os.path.splitext(file_path)[1].lower()
# 判斷文件擴展名
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:
# 獲取文件絕對路徑
file_path = os.path.join(root, file)
# 獲取文件在zip文件中的相對路徑
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: 解壓目標路徑
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文件的絕對路徑(引號包裹,防止路徑中有空格)
os.path.abspath(filepath),
# 目標目錄(確保路徑以一個反斜杠結(jié)束,否則WinRAR會出錯),如果該參數(shù)省略,則會默認為當前目錄
target_folder.rstrip('\\') + '\\',
# 覆蓋已存在的文件
'-o+',
# 將壓縮包名稱作為子目錄添加到目標路徑中,如果添加該參數(shù),則壓縮包名稱會作為子目錄添加到目標路徑中,產(chǎn)生兩層一樣的目錄
# '-ad',
# 后臺運行
# '-ibck',
# 自動確認所有提示
'-y'
]
print("正在執(zhí)行命令:", " ".join(command))
# 運行命令 subprocess本身會處理空格問題
result = subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
print("命令執(zhí)行完畢")
# 因為解壓后的目錄是子目錄,故指定目錄為解壓后的目錄, 即文件均在下面這個文件目錄中
target_folder = target_folder+"\\"+file_name_pre
print('target_folder2:',target_folder)
# 遍歷文件夾,獲取文件夾下所有文件列表 folder_path: 文件夾路徑
def iteration_folder(folder_path):
# 獲取目標目錄下的所有文件路徑
# 定義一個空列表,用于存儲所有文件路徑
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("<--------文件讀取測試--------> ")
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. 檢測文件是否為壓縮文件
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)
# 特殊測試,該文件不存在,同樣可以得到結(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é)果如下

注意,這里解壓縮后的目錄是子目錄,即指定目錄下會生成一個子目錄存放文件

2.2.5 壓縮文件
執(zhí)行代碼查看結(jié)果

如圖壓縮文件生成

2.2.6 遍歷文件夾
獲取文件夾中所有文件的列表
執(zhí)行代碼,查看結(jié)果

對比文件夾目錄中的文件

到此這篇關于基于python開發(fā)文件常見處理工具的文章就介紹到這了,更多相關python文件處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
50行Python代碼實現(xiàn)視頻中物體顏色識別和跟蹤(必須以紅色為例)
本文通過50行Python代碼實現(xiàn)視頻中物體顏色識別和跟蹤效果,通過實例截圖和實例代碼給大家講解的非常詳細,需要的朋友可以參考下2019-11-11
優(yōu)化Python代碼使其加快作用域內(nèi)的查找
這篇文章主要介紹了優(yōu)化Python代碼使其加快作用域內(nèi)的搜索,文中介紹了CPython相關的C代碼來對查找功能進行優(yōu)化,加快搜索的速度,需要的朋友可以參考下2015-03-03
Python中的異常處理:try?except?Exception?as?e解決辦法
這篇文章主要介紹了Python中的異常處理機制,包括try、except、finally語句的基本用法和高級用法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-04-04
Flask和Django框架中自定義模型類的表名、父類相關問題分析
這篇文章主要介紹了Flask和Django框架中自定義模型類的表名、父類相關問題,結(jié)合實例形式對比分析了Flask框架與Django框架表名定義方式的不同之處,并簡單描述了框架的父類繼承問題,需要的朋友可以參考下2018-07-07

