0

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

import os import shutil import fnmatch from pathlib import Path for dirpath, dirnames, files in os.walk('.'): for file_name in files: if fnmatch.fnmatch(file_name, "808"): shutil.copy(file_name, ".") FileNotFoundError: [Errno 2] No such file or directory: 'KSHMR_Trap_808_07_F.wav

4

1 回答 1

0

您必须跟踪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)
于 2019-07-14T23:53:16.560 回答