2017-02-20 19 views
2

Я пытаюсь запустить две операции:Копирование тысячи файлов (отфильтрованные по имени) в указанную папку

  1. Начиная из текстового файла, содержащего некоторые идентификаторы (которые приводят к имени файла), проверяя, если этот файл находится в папке;
  2. Если выполняется шаг 1), копирование файла из этой папки в указанную папку.

В .txt файл хранит коды, подобные этим:

111081 
112054 
112051 
112064 

Это то, что я пытался:

from glob import glob 
from shutil import copyfile 
import os 

input = 'C:/Users/xxxx/ids.txt' 
input_folder = 'C:/Users/xxxx/input/' 
dest_folder = 'C:/Users/xxxx/output/' 
with open(input) as f: 
    for line in f: 
     string = "fixed_prefix_" + str(line.strip()) + '.asc' 
     if os.path.isfile(string): 
      copyfile(string, dest_folder) 

Переменная string генерирует это (например):

print string 
fixed_prefix_111081.asc 

Тогда я уверен, что что-то не так с поиском и копированием файла в папку назначения. Основная проблема заключается в том, что я не знаю, как искать файл fixed_prefix_111081.asc в input_folder.

+2

попробовать 'line.strip()', чтобы удалить конец line char (s) –

+0

@ Jean-FrançoisFabre Спасибо, я справился с этой проблемой. Я редактировал вопрос. – mgri

ответ

2
  • copyfile ожидает имя файла как адресата. Передача существующего каталога - это случай, когда он не работает. Использование copy обрабатывает оба случая (целевой каталог или целевой файл)
  • входной файл передается без пути. Вы должны были бы произвести полное имя файла, если вы не в input_folder или os.path.isfile всегда будет False

Мое затруднительное предложение:

with open(input) as f: 
    for line in f: 
     string = "fixed_prefix_{}.asc".format(line.strip()) 
     fp_string = os.path.join(input_folder,string) 
     if os.path.isfile(fp_string): 
      copy(fp_string, dest_folder) 
+0

Спасибо за идеальное решение и объяснение, я узнал что-то новое! – mgri

 Смежные вопросы

  • Нет связанных вопросов^_^