Принудительно продолжить копирование через список при обнаружении отсутствующего исходного файла

Я использую shutil для копирования вывода из вышестоящего процесса на основе предоставленных пользователем файлов. Иногда эти файлы не совместимы с исходным процессом, и поэтому окончательный файл, который я пытаюсь переместить, не будет создан.

Я передаю список подробных путей к файлам, я хочу, чтобы он продолжал перемещать все элементы в списке, даже если один или несколько исходных файлов отсутствуют.

source = ['/home/Desktop/folder/subfolder/file.ext', '/home/Desktop/folder/subfolder2/file2.ext', '/home/Desktop/folder/subfolder3/file3.ext']
dest = ['/home/Desktop/target/file.ext','/home/Desktop/target/file2.ext', '/home/Desktop/target/file3.ext']
for sou, des in zip(source, dest):
    shutil.copyfile(sou, des)

1 ответ

Решение

Одним из подходов было бы просто добавить обработку исключений вокруг вызова, например:

import shutil

source = ['/home/Desktop/folder/subfolder/file.ext', '/home/Desktop/folder/subfolder2/file2.ext', '/home/Desktop/folder/subfolder3/file3.ext']
dest = ['/home/Desktop/target/file.ext','/home/Desktop/target/file2.ext', '/home/Desktop/target/file3.ext']

for sou, des in zip(source, dest):
    try:
        shutil.copyfile(sou, des)
    except IOError as e:
        print e

Это будет отображать следующее для отсутствующих файлов:

[Errno 2] No such file or directory: '/home/Desktop/folder/subfolder/file.ext'
[Errno 2] No such file or directory: '/home/Desktop/folder/subfolder2/file2.ext'
[Errno 2] No such file or directory: '/home/Desktop/folder/subfolder3/file3.ext'
Другие вопросы по тегам