【问题标题】:Python: Move files to folders containing pattern in namesPython:将文件移动到名称中包含模式的文件夹
【发布时间】:2018-10-17 10:05:58
【问题描述】:

想要自动化排序过程。却搞不定。在同一个文件夹中有大约一千个具有相同扩展名的文件。想要将它们排序到不同的文件夹,例如:XXpattern1XX.XXX 文件到 [pattern1] 文件夹,Xpattern2XXX.XXX 文件到 [pattern2] 文件夹,pattern3XXXX.XXX 文件到 [pattern3] 文件夹等等。

有来自 SO 的脚本,但找不到原始帖子。 但是还没想好怎么改。

#!/usr/bin/env python3

import os
import subprocess
import shutil

# --------------------------------------------------------
reorg_dir = "/path/to/directory_to_reorganize"
exclude = (".jpg") # for example
remove_emptyfolders = True
# ---------------------------------------------------------

for root, dirs, files in os.walk(reorg_dir):
    for name in files:
        subject = root+"/"+name
        if name.startswith("."):
            extension = ".hidden_files"
        elif not "." in name:
            extension = ".without_extension"
        else:
            extension = name[name.rfind("."):]
        if not extension in exclude:
            new_dir = reorg_dir+"/"+extension[1:]
            if not os.path.exists(new_dir):
                os.mkdir(new_dir)
            n = 1; name_orig = name
            while os.path.exists(new_dir+"/"+name):
                name = "duplicate_"+str(n)+"_"+name_orig
                n = n+1
            newfile = new_dir+"/"+name
            shutil.move(subject, newfile)

def cleanup():
    filelist = []
    for root, dirs, files in os.walk(reorg_dir):
        for name in files:
            filelist.append(root+"/"+name)
    directories = [item[0] for item in os.walk(reorg_dir)]
    for dr in directories:
        matches = [item for item in filelist if dr in item]
        if len(matches) == 0:
            try:
                shutil.rmtree(dr)
            except FileNotFoundError:
                pass

if remove_emptyfolders == True:
    cleanup()

thnx

【问题讨论】:

    标签: python organizer


    【解决方案1】:

    你可以试试这样的:

    patterns = ['pattern1', 'pattern2', ...]
    folders = [os.path.join(main_directory, pattern) for pattern in patterns]
    
    # build folders
    for folder in folders:
        if not os.path.exists(folder):
            os.makedirs(folder)
    
    # move files in corresponding folders
    for file in files:  # files is the list of all your file paths
        for pattern, folder in zip(patterns, folders):
            file_name = os.path.basename(file)
            if pattern in file_name:
                os.rename(file, os.path.join(folder, file_name))
    

    【讨论】:

      【解决方案2】:

      检查glob 是否有带有模式的路径

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-06
        • 2020-02-09
        • 1970-01-01
        • 2022-08-22
        • 2020-05-03
        • 1970-01-01
        • 2021-06-30
        • 2019-03-28
        相关资源
        最近更新 更多