2017-02-01 14 views
0

Я пытаюсь переместить pdf-файлы из подкаталогов в папке. Этот код работает и перемещает все найденные PDF-файлы. Я хотел бы только переместить файлы в формате PDF, которые соответствуют номер из текстового файла, используя этот код:Скопируйте файлы из текстового файла в каталог

with open('LIST.txt', 'r') as f: 
    myNames = [line.strip() for line in f] 
    print myNames 

Полный код:

import os 
import shutil 

with open('LIST.txt', 'r') as f: 
    myNames = [line.strip() for line in f] 
    print myNames 

dir_src = r"C:\Users\user\Desktop\oldfolder" 
dir_dst = r"C:\Users\user\Desktop\newfolder" 

for dirpath, dirs, files in os.walk(dir_src): 
    for file in files: 
     if file.endswith(".pdf"): 
      shutil.copy(os.path.join(dirpath, file), dir_dst) 

пример содержимого текстового файла:

111111 
111112 
111113 
111114 
+0

Вы только хотите переместить файлы, соответствующие данные из текстового файла (я предполагаю, что вы имеете в виду ваш ' 'LIST.txt''?) (Каким образом имя файла контента??) –

ответ

0

Первый , создайте set вместо списка здесь, поэтому поиск будет быстрее:

myNames = {line.strip() for line in f} 

Тогда для фильтра я предполагаю, что myNames должен соответствовать базовому имени (минус расширение) вашего файла (ов). Таким образом, вместо:

if file.endswith(".pdf"): 
     shutil.copy(os.path.join(dirpath, file), dir_dst) 

чеки расширения и если расширение базовых минус относится к вашему ранее созданному набору:

bn,ext = os.path.splitext(file) 
    if ext == ".pdf" and bn in myNames: 
     shutil.copy(os.path.join(dirpath, file), dir_dst) 

Чтобы соответствовать имени файла с подстрокой в ​​myNames, вы не можете полагаться на in метод. Вы можете сделать:

if ext == ".pdf" and any(s in file for s in myNames):