猿问

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

想要自动化分拣过程。但解决不了。在同一个文件夹中有大约一千个具有相同扩展名的文件。想要将它们排序到不同的文件夹,例如: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()

谢谢


墨色风雨
浏览 215回答 2
2回答

凤凰求蛊

您可以尝试以下操作:patterns = ['pattern1', 'pattern2', ...]folders = [os.path.join(main_directory, pattern) for pattern in patterns]# build foldersfor folder in folders:    if not os.path.exists(folder):        os.makedirs(folder)# move files in corresponding foldersfor 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))

明月笑刀无情

检查带有模式的路径的glob
随时随地看视频慕课网APP

相关分类

Python
我要回答