Сравните файл со списком и скопируйте соответственно

У меня есть скрипт, который я использую для сравнения и сортировки файлов в двух каталогах. В настоящее время я пытаюсь сравнить все файлы в одном каталоге со списком файлов в другом, а затем скопировать эти файлы в «совпадающий» или «уникальный» каталог.

Мне удалось сопоставить имя файла со списком, а затем скопировать файл, но я не могу заставить его скопировать этот файл в целевой каталог, сохранив при этом имя.

Вот что у меня есть:

input2_only = [file1.mp3, file2.mp3, etc]

for root, dirs, files in os.walk("input2", topdown=False):
    for filename in files:
        print(filename)
        if filename in input2_only:
            print('yay')
            shutil.copy(os.path.join(root, filename), "outputs")

Я думаю, что есть что-то, что я могу изменить в строке Shutil, чтобы заставить это работать, но каждая настройка, которую я пробовал до сих пор, приводила к сердечной боли. Просто для ясности, в этом фрагменте я хочу, чтобы он скопировал файл, сравниваемый со списком, в каталог с именем «выходы». Как только я смогу это сделать, я достаточно уверен, что смогу заполнить остальную часть логики.

Благодарность!


person mweinberg    schedule 14.05.2017    source источник
comment
Являются ли два исходных каталога плоскими, то есть нет вложенных каталогов?   -  person    schedule 14.05.2017
comment
Да. Исходные каталоги плоские, а выходные каталоги плоские.   -  person mweinberg    schedule 14.05.2017


Ответы (1)


Хорошо, разобрался с этим и опубликую на случай, если это будет полезно кому-то еще. Ключом является создание цели вывода перед вызовом Shutil. Правильный фрагмент:

for root, dirs, files in os.walk("input2", topdown=False):
    for filename in files:
        print(filename)
        if filename in input2_only:
            print('yay')
            out = "outputs/" + filename
            shutil.copy(os.path.join(root, filename), out)

эта строка «out» заставляет цель Shutil выводить имя файла в папке «outputs»

person mweinberg    schedule 14.05.2017