简体   繁体   中英

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.

Have a script from SO but can't find the original post. 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

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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