为什么在使用 shututil 循环移动文件时出现未找到文件错误?

Why is there a no file found error while moving files within loop with shututil?

我正在尝试使用 fnmatch 将文件组织到特定的文件夹中,但由于某些原因,一旦文件通过我编写的循环,就无法移动或复制它们。我确保每个目录都正确命名和打印,以检查我的程序是否正常工作。

导入 os 导入shutil 导入 fnmatch 从路径库导入路径 对于目录路径、目录名称、os.walk('.') 中的文件: 对于文件中的 file_name: 如果 fnmatch.fnmatch(file_name, "<em>808</em>"): shutil.copy(file_name, ".") FileNotFoundError: [Errno 2] 没有这样的文件或目录: 'KSHMR_Trap_808_07_F.wav

您必须跟踪 dirpath,然后使用 os.join 构造文件的目标路径。另请记住,如果子目录不存在,您可能需要创建子目录,否则如果名称相同,您可能会尝试覆盖现有文件(这将导致异常)。

import os 
import shutil
import fnmatch

root = '/some/source/path'
target = '/target/path'

for dirpath, dirnames, files in os.walk(root):
    for file_name in files:
        if fnmatch.fnmatch(file_name, "*pattern*"):
            # get the path relative to the source root and create a 
            # new one relative to the target
            path = os.path.join(target, os.path.relpath(dirpath, root))
            if not os.path.exists(path):
                os.makedirs(path)
            shutil.copy(os.path.join(dirpath, file_name), path)