用Python,3天實現(xiàn)文件系統(tǒng)自動“瘦身”!



一、瘦身計劃——自動刪除久未訪問的文件
Pythonimport timeimport os
> time_now = time.time()> time_threshold = time_now - 30 * 24 * 60 * 60
> path = "/Users/guest/Downloads"> files = os.listdir(path)
for file_name in files:file_pathname = os.path.join(path, file_name)if not os.path.isdir(file_pathname):access_time = os.stat(file_pathname).st_atimeif access_time < old_threshold:os.remove(file_name)print('Removed: ' + file_name)
二、一目了然—將文件按類型組織到對應(yīng)子目錄下
老文件清除了,要是文件依然很多,該怎么辦呢?一種簡單的策略,就是“分而治之”, 具體的功能很簡單,給定一個打算整理的文件夾目錄,這個腳本可以將該目錄下的所有文件都揪出來,并且根據(jù)后綴名歸類到不同的文件夾里,這簡直是整理愛好者的福音。把不同類型的文件移到專門的文件夾里,比如把擴展名為“.mp4”和“.mkv”的文件移動到“movie”子目錄,把擴展名為“.png”、“.jpg”的文件移動到“image”子目錄,等等,以后再找文件就能快速定位了,目錄看起來也清爽許多。
首先,還是把問題分解一下,要做的也是三件事:遍歷文件夾下所有文件、根據(jù)文件擴展名判斷文件類型、根據(jù)文件類型將文件移動到對應(yīng)子目錄(子目錄不存在則需要創(chuàng)建子目錄)。先在命令行打開Python交互界面:
Python文件遍歷和路徑操作仍要用到“os”模塊,文件移動操作要用到“shutil”模塊,先加載這兩個模塊:
import osimport shutil
設(shè)定要清理的目錄,通過os.listdir()獲取該目錄下所有項目,保存到files:
> path = "/Users/guest/Download"> files = os.listdir(path)
遍歷files,用os.path.isdir()檢查每一項是文件還是目錄:如果是目錄,則直接忽略,如果是文件,則用.endswith()檢查文件名后綴,據(jù)此判斷文件類別img_class,如果類別檢出成功,則用shutil.move()將該文件移動到類別對應(yīng)的子目錄下,如果該子目錄不存在則用os.makedirs()創(chuàng)建目錄:
for file_name in files:file_pathname = os.path.join(path, file_name)img_class = ''if not os.path.isdir(file_pathname):if file_name.endswith('.jpg') or file_name.endswith('.png'):img_class = 'image'elif file_name.endswith('.mp4') or file_name.endswith('.mkv'):img_class = 'movie'if img_class:target_path = os.path.join(path, img_class)if not os.path.isdir(target_path):os.makedirs(target_path)shutil.move(file_pathname, os.path.join(target_path, file_name))
運行完成,會看到各類文件已經(jīng)被移動到對應(yīng)子目錄下。這里如果不對子目錄是否存在進行判斷就貿(mào)然移動文件,可能會觸發(fā)目錄不存在的異常。
三、解放雙手——Python程序的自動調(diào)度
import timeimport osimport shutiltime_now= time.time()old_threshold = time_now - 30 * 24 * 60 * 60path = "/Users/guest/Download"files = os.listdir(path)for file_name in files:file_pathname = os.path.join(path, file_name)img_class = ''if not os.path.isdir(file_pathname):access_time = os.stat(file_pathname).st_atimeif access_time < old_threshold:os.remove(file_name)print(file_name + ' removed')else:if file_name.endswith('.jpg') or file_name.endswith('.png'):img_class = 'image'elif file_name.endswith('.mp4') or file_name.endswith('.mkv'):img_class = 'movie'if img_class:target_path = os.path.join(path, img_class)if not os.path.isdir(target_path):os.makedirs(target_path)shutil.move(file_pathname, os.path.join(target_path, file_name
crontab -e0 0 * * 0 python system_cleaner.py(版權(quán)歸原作者所有,侵刪)
![]()

點擊下方“閱讀原文”查看更多
