利用python編寫自動(dòng)整理下載目錄工具
先從最簡(jiǎn)單的分類型開始
我的目標(biāo)也很簡(jiǎn)單:按照文件類型,把文件移到對(duì)應(yīng)的子文件夾里,比如 PDF 放 documents,圖片放 images,安裝包放 installers。
先用 os 和 shutil 寫了個(gè)最基礎(chǔ)的版本,大概長(zhǎng)這樣:
import os
import shutil
DOWNLOAD_DIR = os.path.expanduser("~/Downloads")
# 自定義分類規(guī)則
FILE_CATEGORIES = {
"documents": [".pdf", ".docx", ".xlsx"],
"images": [".jpg", ".png", ".gif"],
"installers": [".exe", ".msi", ".dmg"],
"compressed": [".zip", ".rar", ".7z"]
}
for filename in os.listdir(DOWNLOAD_DIR):
filepath = os.path.join(DOWNLOAD_DIR, filename)
if os.path.isdir(filepath):
continue # 跳過文件夾
ext = os.path.splitext(filename)[1].lower()
for category, extensions in FILE_CATEGORIES.items():
if ext in extensions:
target_dir = os.path.join(DOWNLOAD_DIR, category)
os.makedirs(target_dir, exist_ok=True)
shutil.move(filepath, os.path.join(target_dir, filename))
break
這個(gè)腳本大概只用了二三十行代碼,執(zhí)行完之后,整個(gè)下載目錄就沒那么亂了,看著清爽很多。
后來又加了一些小功能
整理完類型之后,我又加了兩個(gè)簡(jiǎn)單的功能:
1. 按時(shí)間歸檔
比如我下載了一些老文件,也許早就用不到了,我想按月份歸類起來,方便日后清理。加個(gè) getmtime 就能搞定:
from datetime import datetime
mtime = os.path.getmtime(filepath)
folder_name = datetime.fromtimestamp(mtime).strftime("%Y-%m")
target_dir = os.path.join(DOWNLOAD_DIR, folder_name)
2. 清理 N 天前的臨時(shí)文件
像 .log、.tmp 這種臨時(shí)文件,我希望自動(dòng)刪除 30 天前的。判斷一下修改時(shí)間就行:
import time
now = time.time()
if ext in [".log", ".tmp"]:
if now - os.path.getmtime(filepath) > 30 * 86400:
os.remove(filepath)
這個(gè)功能很簡(jiǎn)單,但用起來挺省事的。尤其我平時(shí)經(jīng)常截屏,系統(tǒng)會(huì)自動(dòng)保存到下載目錄,這些圖放久了也沒意義,能自動(dòng)清掉最好。
之后的一些嘗試
后來我還試著加了一點(diǎn)點(diǎn)擴(kuò)展:
- 用
argparse支持從命令行輸入目錄路徑和保留天數(shù) - 文件變化監(jiān)聽用
watchdog,可以實(shí)時(shí)整理新下載的文件
另外也有人問我,這腳本是不是每次都得手動(dòng)運(yùn)行?
其實(shí)不用,可以定時(shí)執(zhí)行,方法很簡(jiǎn)單,兩個(gè)思路:
方法一:用 schedule + 無限循環(huán)(適合一直掛著的機(jī)器)
import schedule
import time
import your_cleanup_script # 把你的整理函數(shù)封裝一下放這里
def job():
print("開始整理下載文件夾...")
your_cleanup_script.run()
# 每天早上 8 點(diǎn)執(zhí)行一次
schedule.every().day.at("08:00").do(job)
while True:
schedule.run_pending()
time.sleep(60)
這個(gè)適合你電腦一直開著,比如公司 PC,或者你打算放到服務(wù)器跑。
方法二:用系統(tǒng)自帶的定時(shí)任務(wù)
這個(gè)更實(shí)用一點(diǎn):
macOS / Linux:用 crontab
- 打開終端,輸入
crontab -e - 加一行配置,比如每天 8 點(diǎn)執(zhí)行腳本:
0 8 * * * /usr/bin/python3 /Users/yourname/scripts/clean_downloads.py
Windows:用任務(wù)計(jì)劃程序
- 打開“任務(wù)計(jì)劃程序”
- 創(chuàng)建基本任務(wù)
- 設(shè)置觸發(fā)時(shí)間
- 執(zhí)行操作選擇“啟動(dòng)程序”,路徑填你的 Python 解釋器,參數(shù)填你的腳本路徑。
我個(gè)人用的是 任務(wù)計(jì)劃程序,每天早上清理一次,設(shè)置好之后就不管了,省心。
最后
這個(gè)小腳本到現(xiàn)在我每天都在用。寫它不是什么“大項(xiàng)目”,就是想解決一個(gè)日常小問題。用起來也沒有多炫酷,但真的省心。
自從用了它,我的下載文件夾終于安靜了。 我再也沒被 2 年前的發(fā)票、3 周前的截圖和剛下的壓縮包夾擊過。
如果你也有類似困擾,可以試試動(dòng)手寫一個(gè),不用復(fù)雜,能跑就行。 寫點(diǎn)腳本,真的是最便宜的治愈方式之一。
以上就是利用python編寫自動(dòng)整理下載目錄工具的詳細(xì)內(nèi)容,更多關(guān)于python自動(dòng)整理下載目錄的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python新版極驗(yàn)驗(yàn)證碼識(shí)別驗(yàn)證碼教程詳解
這篇文章主要介紹了Python新版極驗(yàn)驗(yàn)證碼識(shí)別驗(yàn)證碼,極驗(yàn)驗(yàn)證是一種在計(jì)算機(jī)領(lǐng)域用于區(qū)分自然人和機(jī)器人的,通過簡(jiǎn)單集成的方式,為開發(fā)者提供安全、便捷的云端驗(yàn)證服務(wù)2023-02-02
Python隊(duì)列RabbitMQ 使用方法實(shí)例記錄
這篇文章主要介紹了Python隊(duì)列RabbitMQ 使用方法,結(jié)合實(shí)例形式分析了Python隊(duì)列RabbitMQ創(chuàng)建隊(duì)列發(fā)送消息與創(chuàng)建消費(fèi)者消費(fèi)信息相關(guān)操作技巧,需要的朋友可以參考下2019-08-08
pandas的相關(guān)系數(shù)與協(xié)方差實(shí)例
今天小編就為大家分享一篇pandas的相關(guān)系數(shù)與協(xié)方差實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12
詳解python實(shí)現(xiàn)交叉驗(yàn)證法與留出法
這篇文章主要介紹了詳解python實(shí)現(xiàn)交叉驗(yàn)證法與留出法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Python+Pytest實(shí)現(xiàn)壓力測(cè)試詳解
在現(xiàn)代Web應(yīng)用程序中,性能是至關(guān)重要的。為了確保應(yīng)用程序能夠在高負(fù)載下正常運(yùn)行,我們需要進(jìn)行性能測(cè)試。本文就來用Pytest進(jìn)行壓力測(cè)試,希望對(duì)大家有所幫助2023-03-03

