为什么在使用 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)
我正在尝试使用 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)