
來源:數據STUDIO
作者:云朵君
工作中,當你需要對某個文件夾或多個文件夾內的大量類似文件做相同操作(增刪改查)時,你還在拼命加班做一個沒有感情的工具人嘛?掌握以下幾個操作,瞬間完成任務,然后你就可以摸魚去了。
運用Python進行批量處理,無疑是減少了無限的工作量,將枯燥無味,重復性工作交給機器。你只需要花幾分鐘時間編寫幾行代碼,輕松擺脫工具人,這就是辦公自動化的魅力所在。
在介紹批量處理文件之前,先介紹下Python文件IO的一般操作。
import os
1.os.getcwd( )
方法獲取代碼當前工作路徑
2.os.listdir(path)
獲取當前工作文件夾內的文件夾或文件。
用于返回指定的文件夾包含的文件或文件夾的名字的列表。這個列表以字母順序。它不包括 '.' 和'..'即使它在文件夾中。
3.os.makedirs(path, mode=0o777)
用于遞歸創建目錄。
如果子目錄創建失敗或者已經存在,會拋出一個 OSError 的異常,Windows上Error 183 即為目錄已經存在的異常錯誤。
如果第一個參數 path 只有一級,則 mkdir() 函數相同。
4.os.mkdir(path[, mode])
用于以數字權限模式創建目錄。
默認的模式為 0777 (八進制)。如果目錄有多級,則創建最后一級,如果最后一級目錄的上級目錄有不存在的,則會拋出一個 OSError。
5.os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
是一個簡單易用的文件、目錄遍歷器,可以幫助我們高效的處理文件、目錄方面的事情。
可以創建一個生成器,用以生成所要查找的目錄及其子目錄下的所有文件。
用于通過在目錄樹中游走輸出在目錄中的文件名,向上或者向下。
6.os.chdir(path)
用于改變當前工作目錄到指定的路徑。
7.os.path.abspath(path)
返回絕對路徑
8.os.path.dirname(path)
返回文件路徑
9.os.path.join(path1[, path2[, ...]])
把目錄和文件名合成一個路徑
10.os.path.split(path)
把路徑分割成 dirname 和 basename,返回一個元組
11.os.path.splitext(path)
分割路徑中的文件名與拓展名
12.os.path.walk(path, visit, arg)
遍歷path,進入每個目錄都調用visit函數,visit函數必須有3個參數(arg, dirname, names),dirname表示當前目錄的目錄名,names代表當前目錄下的所有文件名,args則為walk的第三個參數。
13.os.path.exists(path)
路徑存在則返回True,路徑損壞返回False。
當一個文件夾中含有多種類型的文件,以下列舉幾個,有時候實際情況比這更多更復雜,我們需要找到需要的格式文件比較困難,因此批量獲取指定后綴名的文件顯得尤其重要。
import os def find_file(work_dir, extension='jpg'): """
獲取指定后綴名的文件
:param work_dir:傳遞當前目錄
:param extension:指定的后綴名
:return: 返回所有目錄下的文件
""" # 空列表用以存儲獲取到的文件名 lst = []
for filename in os.listdir(work_dir):
# 指定文件夾中的文件名逐一打印 print(filename)
# 獲取得到文件后綴 splits = os.path.splitext(filename)
file_ext = splits[1] # 拿到擴展名 if file_ext == '.' + extension:
lst.append(filename)
return lst
函數運用
>>> In: find_file('./批處理')
.ipynb_checkpoints
Data STUDIO.jpg
logger.py
MySQL.zip
svm.pptx
test.csv
text.xls
text.xlsx
關注《數據STUDIO》.gif
成都市地圖.html
批處理.ipynb
控規圖.dwg >>> Out: ['Data STUDIO.jpg']
此方法是獲取指定后綴名的文件的一個應用,獲取到指定后綴名的文件后對相應文件作一個修改。
import os def batch_rename(work_dir, old_ext ='.xls', new_ext='.xlsx'): """
批量重命名后綴
:param work_dir:傳遞當前目錄
:param old_ext:原來后綴名
:param 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))
如果將其中的file_ext = split_file[1]改為file_name = split_file[0],后面再做相應的修改,可以變成批量修改文件名稱。
這里演示os.walk(path) 的應用。有時我們需要獲取某個具有好幾個層級的目錄下的所有文件,根據條件篩選出某個目標文件,對其做相應的操作。這里演示獲取文件的修改時間。
# 獲取目錄下文件的修改時間 import os
from datetime import datetime print(f"當前時間:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
def get_modify_time(indir):
for root, _, files in os.walk(indir): # 循環D:批處理目錄和子目錄 for file in files:
absfile = os.path.join(root, file)
modtime = datetime.fromtimestamp(os.path.getmtime(absfile))
now = datetime.now()
difftime = now-modtime
if difftime.days < 20: # 條件篩選超過指定時間的文件 print(f"""{absfile}
修改時間[{modtime.strftime('%Y-%m-%d %H:%M:%S')}]
距今[{difftime.days:3d}天{difftime.seconds//3600:2d}時
{difftime.seconds%3600//60:2d}]""" ) # 打印相關信息 get_modify_time('./批處理')
輸出
當前時間:2021-02-05 19:21:48 ./MySQL.zip修改時間[2021-01-29 16:46:13]距今[ 7天 3時35]
./svm.pptx修改時間[2021-01-21 10:22:12]距今[ 15天 8時59] ./test.csv修改時間[2021-01-25 18:36:40]距今[ 11天 0時45] ./關注《數據STUDIO》.gif修改時間[2021-02-04 11:14:07]距今[ 1天 8時 7] ./批處理.ipynb修改時間[2021-02-05 19:21:44]距今[ 0天 0時 0] ./.ipynb_checkpoints批處理-checkpoint.ipynb修改時間[2021-02-05 19:57:42]距今[ 0天 0時24]
這里同樣運用到os.path.walk(path) 。
另外一個用來做壓縮和解壓的Python模塊--zipfile
壓縮文件
zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])
有如下常用方法
ZipFile.infolist()獲取zip文檔內所有文件的信息,返回一個zipfile.ZipInfo的列表
ZipFile.namelist() 獲取zip文檔內所有文件的名稱列表
ZipFile.printdir()將zip文檔內的信息打印到控制臺上
import zipfile # 加載壓縮文件,創建ZipFile對象 file_dir = './Data STUDIO.zip' zipFile = zipfile.ZipFile(file_dir) print('info:',zipFile.infolist()) print('name:',zipFile.namelist()) print('dir:',zipFile.printdir())
輸出
info: [<ZipInfo filename='Data STUDIO.jpg' compress_type=deflate external_attr=0x20 file_size=791106 compress_size=336551>] name: ['Data STUDIO.jpg'] File Name Modified Size Data STUDIO.jpg 2020-11-03 10:01:00 791106 dir: None
解壓文件
ZipFile.extract(member[, path[, pwd]])
將zip文檔內的指定文件解壓到當前目錄。
下面一個例子將保存在程序根目錄下的text.zip內的所有文件解壓到D:/Work 目錄
import zipfile import os
zipFile = zipfile.ZipFile(file_dir) for file in zipFile.namelist():
zipFile.extract(file, 'd:/Work')
zipFile.close()
另一種解壓zip文檔中的所有文件到當前目錄:
ZipFile.extractall([path[, members[, pwd]]])
members的默認值為zip文檔內的所有文件名稱列表,也可以自己設置,選擇要解壓的文件名稱
批量壓縮文件
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.path.walk(start_dir):
print(dir_path)
print(dir_names)
print(file_names)
# 這一句很重要,不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('E:/批處理/test')
輸出
E:/批處理/test []
['Data STUDIO.jpg', 'logger.py', 'MySQL.zip', 'svm.pptx', 'test.csv', 'text.xls', 'text.xlsx', '關注《數據STUDIO》.gif', '成都市地圖.html', '控規圖.dwg'] 'E:/批處理/test.zip'
檢驗壓縮效果。
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
CDA數據分析師證書考試體系(更新于2025年05月22日)
2025-05-26解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25