简体   繁体   English

Python:将文件移动到名称中包含模式的文件夹

[英]Python: Move files to folders containing pattern in names

Want to automatize the sorting process. 想要自动化排序过程。 But can't work it out. 但是无法解决。 Have about thousand files with the same extension in the same folder. 同一文件夹中约有数千个具有相同扩展名的文件。 Want to sort them to different folders like: XXpattern1XX.XXX file to [pattern1]folder, Xpattern2XXX.XXX file to [pattern2]folder, pattern3XXXX.XXX file to [pattern3]folder and so on. 要将它们排序到不同的文件夹,例如:XXpattern1XX.XXX文件到[pattern1]文件夹,Xpattern2XXX.XXX文件到[pattern2]文件夹,pattern3XXXX.XXX文件到[pattern3]文件夹,等等。

Have a script from SO but can't find the original post. 有一个来自SO的脚本,但是找不到原始帖子。 But could not figure it out how to change it yet. 但是还不能弄清楚如何更改它。

#!/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 日Thnx

You can try something like: 您可以尝试如下操作:

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))

检查全局是否包含模式路径

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM