【问题标题】:Python Move Files Based On NamePython根据名称移动文件
【发布时间】:2016-03-18 17:38:08
【问题描述】:

为了表扬,我目前正在使用的代码来自 cji 的回复,here.

我正在尝试递归地从源文件夹中提取所有文件,并将它们从文件名的前五个字符0:5移动到文件夹中

下面是我的代码:

import os
import shutil

srcpath = "SOURCE"
srcfiles = os.listdir(srcpath)

destpath = "DESTINATION"

# extract the three letters from filenames and filter out duplicates
destdirs = list(set([filename[0:5] for filename in srcfiles]))


def create(dirname, destpath):
    full_path = os.path.join(destpath, dirname)
    os.mkdir(full_path)
    return full_path

def move(filename, dirpath):
    shutil.move(os.path.join(srcpath, filename)
                ,dirpath)

# create destination directories and store their names along with full paths
targets = [(folder, create(folder, destpath)) for folder in destdirs]

for dirname, full_path in targets:
    for filename in srcfiles:
        if dirname == filename[0:5]:
            move(filename, full_path)

现在,更改srcfiles = os.listdir(srcpath)destdirs = list(set([filename[0:5] for filename in srcfiles])) 使用下面的代码 可以得到一个变量中的路径和另一个变量中文件名的前五个字符。

srcfiles = []
destdirs = []

for root, subFolders, files in os.walk(srcpath):
    for file in files:
       srcfiles.append(os.path.join(root,file))
    for name in files:
       destdirs.append(list(set([name[0:5] for file in srcfiles])))

我将如何修改原始代码以使用它...或者如果有人对我将如何进行此操作有更好的想法。谢谢。

【问题讨论】:

    标签: python python-2.7 file move


    【解决方案1】:

    我真的不能很容易地测试它,但我认为这段代码应该可以工作:

    import os
    import shutil
    
    srcpath = "SOURCE"
    destpath = "DESTINATION"
    
    for root, subFolders, files in os.walk(srcpath):
        for file in files:
            subFolder = os.path.join(destpath, file[:5])
            if not os.path.isdir(subFolder):
                os.makedirs(subFolder)
            shutil.move(os.path.join(root, file), subFolder)
    

    【讨论】:

    • 感谢您的回复! 'os.path.mkdir(subFolder):' 对我不起作用。我不得不删除路径。使用:'os.makedirs(subFolder)'
    • 对不起,我编辑了我的答案。 mkdirmakedirs 函数位于 os 模块中,而不是 os.path 子模块中。 mkdir 应该可以工作,除非子文件夹嵌套超过一层。
    • 如果我说将来想详细说明子文件夹......那会是一个简单的定制吗?所以假设我有一个名为 045679.jpg 的文件,我希望它放入 0 文件夹 > 045 文件夹 > 04567 文件夹之类的。
    • 是的,您可以这样做:subFolder = os.path.join(destpath, file[:3], file[:5])os.makedirs() 函数将创建所有必要的文件夹。
    • 这很有趣,在发布问题后,我想,为什么不尝试自己添加“文件[]”。感谢大家的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多