Python實現(xiàn)自動化整理文件的示例代碼
自動化整理計算機(jī)文件
通過Python編程完成文件的自動分類、文件和文件夾的快速查找、重復(fù)文件的清理、圖片格式的轉(zhuǎn)換等常見工作。
1. 文件的自動分類
根據(jù)文件的擴(kuò)展名將文件分類整理到不同文件夾中。
使用os和shutil模塊
os模塊提供了許多操作文件和文件夾的函數(shù),可對文件或文件夾進(jìn)行新建、刪除、查看屬性以及查找路徑等操作。
shutil模塊提供的函數(shù)可對文件或文件夾進(jìn)行移動、復(fù)制、壓縮等操作。
""" os模塊提供了許多操作文件和文件夾的函數(shù),可對文件或文件夾進(jìn)行新建、刪除、查看屬性以及查找路徑等操作。 shutil模塊提供的函數(shù)可對文件或文件夾進(jìn)行移動、復(fù)制、壓縮等操作。 """ import os import shutil # 源文件目錄 src_dir = "待分類文件/" # 輸出文件的目錄 output_dir = '已分類文件/' files = os.listdir(src_dir) # 列出src_dir目錄下的所有文件及子文件夾的名稱 print(files) for f in files: # 獲得路徑 src_path = src_dir + f # 判斷是否是文件 if os.path.isfile(src_path): # 獲取文件后綴,與輸出目錄拼接成輸出文件夾路徑 output_path = output_dir + f.split('.')[-1] # 判斷輸出文件夾是否存在,若不存在則需要創(chuàng)建 if not os.path.exists(output_path): os.mkdir(output_path) # 將文件移動到輸出目錄中與其擴(kuò)展名對應(yīng)的文件夾中 shutil.move(src_path, output_path)
測試文件:
效果:
使用pathlib模塊
from pathlib import Path # 源文件目錄 src_dir_name = "待分類文件/" # 輸出文件的目錄 output_dir_name = '已分類文件/' # 使用Path()函數(shù)為源文件夾和目標(biāo)文件夾創(chuàng)建路徑對象 src_dir = Path(src_dir_name) output_dir = Path(output_dir_name) # 在源文件夾下查找文件和子文件夾,*表示返回所有文件和子文件夾(完整路徑) files = src_dir.glob('*') for f in files: # 判斷路徑是否代表文件 if f.is_file(): # 獲得輸出文件夾路徑 output_path = output_dir / f.suffix.strip('.') # 判斷輸出文件夾是否存在 if not output_path.exists(): # 不存在則創(chuàng)建,parents為True表示創(chuàng)建多級文件夾 output_path.mkdir(parents=True) # 將文件路徑重命名為給定的路徑,實現(xiàn)文件移動 f.replace(output_path / f.name)
2. 文件和文件夾的快速查找
使用python編寫快速查找文件和文件夾程序,實現(xiàn)精確查找和模糊查找。
精確查找文件和文件夾
from pathlib import Path while True: folder = input("請輸入查找目錄的路徑(如:D:\\):") folder = Path(folder.strip()) # 使用Path()函數(shù)創(chuàng)建路徑對象 # 判斷輸入的路徑是否存在,且是否為目錄 if folder.exists() and folder.is_dir(): break else: print("輸入的路徑有誤,請重新輸入!") search_word = input("請輸入要查找的文件或文件夾名稱:").strip() # 獲得輸入的文件或文件夾名稱,去掉首尾空格 """ glob()函數(shù)和rglob()函數(shù)的區(qū)別: glob()函數(shù)和rglob()函數(shù)都能使用通配符在指定路徑下查找文件和子文件夾。 區(qū)別在于: glob()函數(shù)只進(jìn)行以及查找,而rglob()函數(shù)會進(jìn)行多級查找。 """ # 使用rglob()函數(shù)在用戶輸入的路徑下查找名稱與指定關(guān)鍵詞完全相同的文件及字文件夾,并將結(jié)果轉(zhuǎn)換成列表 results = list(folder.rglob(pattern=search_word)) if len(results) != 0: print(f'在【{folder}】下查找到的結(jié)果如下:') for r in results: print(r) else: print(f'在【{folder}】下未找到名為【{search_word}】的文件或文件夾!')
效果:
模糊查找文件和文件夾
# author:mlnt # createdate:2022/8/23 from pathlib import Path while True: folder = input("請輸入查找目錄的路徑(如:D:\\):") folder = Path(folder.strip()) # 使用Path()函數(shù)創(chuàng)建路徑對象 # 判斷輸入的路徑是否存在,且是否為目錄 if folder.exists() and folder.is_dir(): break else: print("輸入的路徑有誤,請重新輸入!") search_word = input("請輸入要查找的文件或文件夾名稱:").strip() # 獲得輸入的文件或文件夾名稱,去掉首尾空格 """ glob()函數(shù)和rglob()函數(shù)的區(qū)別: glob()函數(shù)和rglob()函數(shù)都能使用通配符在指定路徑下查找文件和子文件夾。 區(qū)別在于: glob()函數(shù)只進(jìn)行以及查找,而rglob()函數(shù)會進(jìn)行多級查找。 """ # 使用rglob()函數(shù)在用戶輸入的路徑下查找名稱與指定關(guān)鍵詞完全相同的文件及字文件夾,并將結(jié)果轉(zhuǎn)換成列表 results = list(folder.rglob(pattern=f'*{search_word}*')) if len(results) == 0: print(f'在【{folder}】下未找到名稱包含【{search_word}】的文件或文件夾!') else: result_folders = [] # 查找到的與關(guān)鍵詞相關(guān)的文件夾 result_files = [] # 與關(guān)鍵詞相關(guān)的文件 for r in results: if r.is_dir(): # 如果是目錄(文件夾),則添加到文件夾列表 result_folders.append(r) else: result_files.append(r) if len(result_folders) != 0: print(f'在【{folder}】下查找到的與關(guān)鍵詞{search_word}相關(guān)的文件夾:') for f in result_folders: print(f) if len(result_files) != 0: print(f'在【{folder}】下查找到的與關(guān)鍵詞{search_word}相關(guān)的文件如下:') for f in result_files: print(f)
效果:
3. 自動清理重復(fù)文件
自動清理文件實現(xiàn)步驟:
1.列出指定文件夾下的所有文件;
2.兩兩比較文件內(nèi)容是否相同;
3.如果內(nèi)容相同,則將其中一個文件移動到指定的文件夾中
""" 自動清理文件實現(xiàn)步驟: 1.列出指定文件夾下的所有文件; 2.兩兩比較文件內(nèi)容是否相同; 3.如果內(nèi)容相同,則將其中一個文件移動到指定的文件夾中 """ # 導(dǎo)入pathlib模塊中的Path()函數(shù) from pathlib import Path # 導(dǎo)入filecmp模塊中的cmp()函數(shù),用于進(jìn)行文件的比較 from filecmp import cmp input_dir = '待處理文件' output_dir = '重復(fù)文件' # 創(chuàng)建Path對象 src_folder = Path(input_dir) output_folder = Path(output_dir) # 判斷輸出目錄是否存在 if not output_folder.exists(): # 不存在則創(chuàng)建目錄(多級創(chuàng)建) output_folder.mkdir(parents=True) results = list(src_folder.glob('*')) # 列出給定目錄下的文件及子文件夾 file_list = [] for r in results: # 判斷路徑是否指向一個文件 if r.is_file(): # 是則添加到文件列表 file_list.append(r) # 遍歷文件列表,并進(jìn)行比較 for i in file_list: for j in file_list: if i != j and i.exists() and j.exists(): # 比較兩個文件是否相同 if cmp(i, j): # 如果兩個文件相同,則把其中一個文件移動到指定文件夾 # 刪除重復(fù)文件j.unlink() j.replace(output_folder / j.name)
測試文件:
效果:
4. 批量轉(zhuǎn)換圖片格式
from pathlib import Path from PIL import Image input_dir = 'input_images' output_dir = 'output_images' # 創(chuàng)建Path對象 src_folder = Path(input_dir) output_folder = Path(output_dir) # 判斷輸出目錄是否存在 if not output_folder.exists(): # 不存在則創(chuàng)建目錄(多級創(chuàng)建) output_folder.mkdir(parents=True) file_list = list(src_folder.glob('*[.jpg|.jpeg]')) # 查找后綴為jpg或jpeg的圖片 for f in file_list: output_file = output_folder / f.name # 將路徑的擴(kuò)展名進(jìn)行替換 output_file = output_file.with_suffix('.png') # 保存圖片到指定路徑 Image.open(f).save(output_file) print(f'{f.name}-->格式轉(zhuǎn)換完成!')
測試文件:
效果:
5. 按拍攝日期自動分類圖片
需安裝exifread模塊:
pip install exifread
步驟:
1.列出指定文件夾下的所有圖片;
2.讀取圖片的EXIF(Exchangeable Image File Format)信息,并提取出拍攝日期;
3.將拍攝日期轉(zhuǎn)換為所需格式,然后使用拍攝日期創(chuàng)建文件夾;
4.將圖片移動到拍攝日期對應(yīng)的文件夾中。
""" 步驟: 1.列出指定文件夾下的所有圖片; 2.讀取圖片的EXIF(Exchangeable Image File Format)信息,并提取出拍攝日期;pip install exifread 3.將拍攝日期轉(zhuǎn)換為所需格式,然后使用拍攝日期創(chuàng)建文件夾; 4.將圖片移動到拍攝日期對應(yīng)的文件夾中。 """ from pathlib import Path from datetime import datetime from exifread import process_file input_dir = 'input_images' output_dir = 'output_dir' # 創(chuàng)建Path對象 src_folder = Path(input_dir) output_folder = Path(output_dir) # 判斷輸出目錄是否存在 if not output_folder.exists(): # 不存在則創(chuàng)建目錄(多級創(chuàng)建) output_folder.mkdir(parents=True) # 查找后綴為jpg或jpeg的圖片 file_list = list(src_folder.glob('*[.jpg|.jpeg]')) for f in file_list: with open(f, 'rb') as fp: # 讀取圖片的EXIF信息 # process_file函數(shù)會將讀取的EXIF信息以字典格式返回 tags = process_file(fp, details=False) # 判斷字典中是否有拍攝日期 if 'EXIF DateTimeOriginal' in tags.keys(): dto = str(tags['EXIF DateTimeOriginal']) # 將拍攝日期轉(zhuǎn)換成所需格式,作為文件夾名稱 folder_name = datetime.strptime(dto, '%Y:%m:%d %H:%M:%S').strftime('%Y-%m-%d') # 設(shè)置輸出目錄的路徑 output_path = output_folder / folder_name if not output_path.exists(): output_path.mkdir(parents=True) # 將圖片移動到拍攝日期對應(yīng)的文件夾中 f.replace(output_path / f.name)
測試文件:
效果:
以上就是Python實現(xiàn)自動化整理文件的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Python整理文件的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
淺談Python2、Python3相對路徑、絕對路徑導(dǎo)入方法
今天小編就為大家分享一篇淺談Python2、Python3相對路徑、絕對路徑導(dǎo)入方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06python實現(xiàn)把二維列表變?yōu)橐痪S列表的方法分析
這篇文章主要介紹了python實現(xiàn)把二維列表變?yōu)橐痪S列表的方法,結(jié)合實例形式總結(jié)分析了Python列表推導(dǎo)式、嵌套、循環(huán)等相關(guān)操作技巧,需要的朋友可以參考下2019-10-10Python Pandas pandas.read_sql_query函數(shù)實例用法分析
在本篇文章里小編給大家整理的是一篇關(guān)于Python Pandas pandas.read_sql_query函數(shù)實例用法分析內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)下。2021-06-06