首頁 > 軟體

python實現自動整理檔案

2022-04-10 22:00:45

前言:

平時工作沒有養成分類的習慣,整個桌面雜亂無章都是檔案和資料,幾乎快佔滿整個螢幕了。所以必須要整理一下了,今天我們來看下用python如何批次將不同字尾的檔案移動到同一資料夾。

演示效果:

  • 使用前

  • 使用後

程式碼:

# # -*- coding:utf-8 -*-
import os
import glob
import shutil
import tkinter
import tkinter.filedialog
from datetime import datetime

def start():
    root = tkinter.Tk()
    root.withdraw()
    dirname = tkinter.filedialog.askdirectory(parent=root,initialdir="/",title='請選擇資料夾')
    return dirname


# 定義一個檔案字典,不同的檔案型別,屬於不同的資料夾
file_dict = {
    "圖片": ["jpeg", "jpg", "tiff", "gif", "bmp", "png", "bpg", "svg", "heif", "psd"],
    "視訊": ["avi", "flv", "wmv", "mov", "mp4", "webm", "vob", "mng", "qt", "mpg", "mpeg", "3gp", "mkv"],
    "音訊": ["aac", "aa", "aac", "dvf", "m4a", "m4b", "m4p", "mp3", "msv", "ogg", "oga", "raw", "vox", "wav", "wma"],
    "檔案": ["oxps", "epub", "pages", "docx", "doc", "fdf", "ods", "odt", "pwi", "xsn", "xps", "dotx", "docm", "dox",
"rvg", "rtf", "rtfd", "wpd", "xls", "xlsx","xlsm","ppt", "pptx", "csv", "pdf", "md","xmind"],
    "壓縮檔案": ["a", "ar", "cpio", "iso", "tar", "gz", "rz", "7z", "dmg", "rar", "xar", "zip"],
    "文字": ["txt", "in", "out","json","xml","log"],
    "程式指令碼": ["py", "html5", "html", "htm", "xhtml", "cpp", "java", "css","sql"], 
    '可執行程式': ['exe', 'bat', 'lnk', 'sys', 'com','apk'],
    '字型檔案': ['eot', 'otf', 'fon', 'font', 'ttf', 'ttc', 'woff', 'woff2','shx'],
    '工程圖檔案':['bak','dwg','dxf','dwl','dwl2','stp','SLDPRT','ipj','ipt','idw']
}

# 定義一個函數,傳入每個檔案對應的字尾。判斷檔案是否存在於字典file_dict中;
# 如果存在,返回對應的資料夾名;如果不存在,將該資料夾命名為"未知分類";
def JudgeFile(suffix):
    for name, type_list in file_dict.items():
        if suffix.lower() in type_list:
            return name
    return "未知分類"

if __name__ == '__main__':
    try:
        while True:
            path = start()
            print("---->路徑是: ",path)
            if path == "":
                print("沒有選擇路徑!")
                break
            # 遞迴獲取 "待處理檔案路徑" 下的所有檔案和資料夾。
            startTime = datetime.now().second
            for file in glob.glob(f"{path}/**/*", recursive=True):
                # 由於我們是對檔案分類,這裡需要挑選出檔案來。
                if os.path.isfile(file):
                    # 由於isfile()函數,獲取的是每個檔案的全路徑。這裡再呼叫basename()函數,直接獲取檔名;
                    file_name = os.path.basename(file)
                    suffix = file_name.split(".")[-1]
                    # 判斷 "檔名" 是否在字典中。
                    name = JudgeFile(suffix)
                    # 根據每個檔案分類,建立各自對應的資料夾。
                    if not os.path.exists(f"{path}\{name}"):
                        os.mkdir(f"{path}\{name}")
                        print('path-->',name)
                    # 將檔案複製到各自對應的資料夾中。
                    # shutil.copy(file, f"{path}\{name}")
                    # 將檔案移動到各自對應的資料夾中。
                    shutil.move(file, f"{path}\{name}")
            endTime = datetime.now().second
            countTime= endTime-startTime
            print("---->已經整理完成。共花費 {} s".format(countTime))
            a = input('---->請按確認鍵退出:')
            if a == '':
                break
    except BaseException:
        print('存在重複的檔案!')

執行起來很簡單,只要寫完程式,點選程執行,等待彈出視窗,選擇需要整理的資料夾即可。

如果覺得以上程式碼覺得複雜,可以嘗試以下更為簡單的程式。

如何實現檔案自動分類?

同一目錄下存在很多不同型別的資源條件

  • 1 .分類
  • 2.建立分類目錄
  • 3.移動檔案資源
import os
import shutil
import tkinter
import tkinter.filedialog
from datetime import datetime

def start():
    root = tkinter.Tk()
    root.withdraw()
    dirname = tkinter.filedialog.askdirectory(parent=root,initialdir="/",title='請選擇資料夾')
    return dirname

# 原始檔存在路徑
src_dir=start()
# 分類資源存在路徑
dest_dir=src_dir
# 判斷目錄是否存在
if not os.path.exists(dest_dir):
    os.mkdir(dest_dir)
# 源目錄分析
files=os.listdir(src_dir)
for item in files:
    src_path=os.path.join(src_dir,item)
    # 判斷狀態
    if os.path.isfile(src_path):
        #如果是檔案,進入程式碼塊
        # 判斷檔案資源的型別
        ndir = item.split('.')[-1]
        desc_path=os.path.join(dest_dir,ndir)
        # 建立分類目錄
        if not os.path.exists(desc_path):
            # 如果分類子目錄不存在,建立
            os.mkdir(desc_path)
        shutil.move(src_path,desc_path)

到此這篇關於python實現自動整理檔案的文章就介紹到這了,更多相關python整理檔案內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com