Почему при перемещении файлов в цикле с помощью shututil не найдено ни одной ошибки?

Я пытаюсь организовать файлы в определенные папки с помощью 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

1 ответ

Решение

Вы должны следить за 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)
Другие вопросы по тегам