用Python,3天實(shí)現(xiàn)文件系統(tǒng)自動“瘦身”!
點(diǎn)擊上方“程序員大白”,選擇“星標(biāo)”公眾號
重磅干貨,第一時間送達(dá)

文章轉(zhuǎn)載:Python編程


一、瘦身計劃——自動刪除久未訪問的文件
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ù)后綴名歸類到不同的文件夾里,這簡直是整理愛好者的福音。把不同類型的文件移到專門的文件夾里,比如把擴(kuò)展名為“.mp4”和“.mkv”的文件移動到“movie”子目錄,把擴(kuò)展名為“.png”、“.jpg”的文件移動到“image”子目錄,等等,以后再找文件就能快速定位了,目錄看起來也清爽許多。
首先,還是把問題分解一下,要做的也是三件事:遍歷文件夾下所有文件、根據(jù)文件擴(kuò)展名判斷文件類型、根據(jù)文件類型將文件移動到對應(yīng)子目錄(子目錄不存在則需要創(chuàng)建子目錄)。先在命令行打開Python交互界面:
Python文件遍歷和路徑操作仍要用到“os”模塊,文件移動操作要用到“shutil”模塊,先加載這兩個模塊:
import osimport shutil
設(shè)定要清理的目錄,通過os.listdir()獲取該目錄下所有項(xiàng)目,保存到files:
> path = "/Users/guest/Download"> files = os.listdir(path)
遍歷files,用os.path.isdir()檢查每一項(xiàng)是文件還是目錄:如果是目錄,則直接忽略,如果是文件,則用.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))
運(yùn)行完成,會看到各類文件已經(jīng)被移動到對應(yīng)子目錄下。這里如果不對子目錄是否存在進(jìn)行判斷就貿(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推薦閱讀
國產(chǎn)小眾瀏覽器因屏蔽視頻廣告,被索賠100萬(后續(xù))
年輕人“不講武德”:因看黃片上癮,把網(wǎng)站和786名女主播起訴了
關(guān)于程序員大白
程序員大白是一群哈工大,東北大學(xué),西湖大學(xué)和上海交通大學(xué)的碩士博士運(yùn)營維護(hù)的號,大家樂于分享高質(zhì)量文章,喜歡總結(jié)知識,歡迎關(guān)注[程序員大白],大家一起學(xué)習(xí)進(jìn)步!

