为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

墨色风雨 2021-07-16 18:19:59
想要自动化分拣过程。但解决不了。在同一个文件夹中有大约一千个具有相同扩展名的文件。想要将它们排序到不同的文件夹,例如:XXpattern1XX.XXX 文件到 [pattern1] 文件夹,Xpattern2XXX.XXX 文件到 [pattern2] 文件夹,pattern3XXXX.XXX 文件到 [pattern3] 文件夹等等。有来自 SO 的脚本,但找不到原始帖子。但是现在还想不出怎么改。#!/usr/bin/env python3import osimport subprocessimport shutil# --------------------------------------------------------reorg_dir = "/path/to/directory_to_reorganize"exclude = (".jpg") # for exampleremove_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:                passif remove_emptyfolders == True:    cleanup()谢谢
查看完整描述

2 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

您可以尝试以下操作:


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


查看完整回答
反对 回复 2021-07-21
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

检查带有模式的路径的glob


查看完整回答
反对 回复 2021-07-21
  • 2 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信