2015-09-12 5 views
1

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

У меня есть список чисел в текстовом файле, который обозначает числа изображений, которые необходимо скопировать. Этот список похож на этот

7348 
    7352 
    7357 
    7360 
    7380 
    7381 
    . 
    . 
    . 

Изображение с именем

IMG_7348.jpg 
    IMG_7349.jpg 
    . 
    . 
    . 

Используя числа из текстового файла, я хочу, чтобы скопировать только те изображения, в другую папку. Это питон код, который я написал для того же

import os 
    import shutil 
    src = input('Enter the source folder'); 
    dest = input('Enter the destination folder'); 
    src_files = os.listdir(src) 
    with open("image_numbers.txt") as f: 
     lines = [line.rstrip('\n') for line in open('image_numbers.txt')] 
     for line in lines: 
      numbers_str = line 
      #print(numbers_str) 
      temp2 = str('IMG_')+numbers_str+str('.jpg') 
      #print(temp2) 
      for name_im in src_files: 
       #print(name_im) 
       print(name_im == temp2) 
       if name_im == temp2: 
        src_files_filt = temp2 
        #print('stored') 
      #numbers_float = [float(x) for x in numbers_str] 
      #map(float,numbers_str) works too 
    for file_name in src_files_filt: 
     full_file_name = os.path.join(src, file_name) 
     if (os.path.isfile(full_file_name)): 
      shutil.copy(full_file_name, dest) 
  1. Когда я использую операторы печати, я получаю, чтобы увидеть, что имя реформирована изображение и имя из СРК являются одинаковыми, но заявление

    print(name_im == temp2) 
    

дает мне

false 

Я не могу понять причину

Не могли бы вы помочь мне исправить ошибку? Я новичок в python, поэтому, пожалуйста, расскажите мне, если ошибка рудиментарна.

+0

Я редактировал мое объяснение, чтобы объяснить, для задачи 1, я думаю, просто из-за размещения операторов печати. – qwertyuip9

ответ

1

Я не слишком уверен, почему произошли 2 ошибки. Вторая проблема, которую вы подробно описали, для меня не возникла, но я исправил ваш код, чтобы сделать его более чистым и более питоническим. Возникла проблема с «src_files_filt», поскольку последний цикл цикла повторил его как список, но «src_files_filt» был только строкой. Я сделал так, чтобы скрипт выполнял изменение файла сразу после того, как имена файлов совпали.

Редактирование: снова просмотрев вашу программу для проблемы 1, некоторые из значений должны возвращать значение false, так как есть другие файлы, отсутствующие в текстовом файле. Если вы поместите оператор печати внутри блока if, он должен всегда возвращать true, как ожидалось.

import os 
import shutil 

src = input('Enter the source folder'); 
dest = input('Enter the destination folder'); 
src_files = os.listdir(src) 

with open("image_numbers.txt") as f: 
    lines = [line.rstrip('\n') for line in open('image_numbers.txt')] 
    for line in lines: 
     numbers_str = line 

     temp1 = 'IMG_' + numbers_str + '.jpg' 

     for name_im in src_files: 
      if name_im == temp1: 
       full_file_name = os.path.join(src, temp1) 
       if (os.path.isfile(full_file_name)): 
        shutil.copy(full_file_name, dest) 
+0

спасибо помощнику. работал как шарм! –

+0

без проблем! рад помочь. – qwertyuip9

+0

ОК, он не работает снова, почему-то. Тот же код, разные папки и файлы, но теперь он не работает. любая идея отладки? –

1

печати (ул (name_im) == temp2) возвращает истину

+0

спасибо помощнику. понял –

1

Вы уже открывают "image_numbers.txt" и переборе каждой линии, так что вам не нужно, чтобы открыть его снова перебирать раздеть " \ п».

lines = [line.rstrip('\n') for line in open('image_numbers.txt')] 

Это может быть достигнуто более легко чередование «\ п» при переборе for line in f. Когда я запускал ваш код, он не удалял «\ n», что помешало ему оценить True в print(name_im == temp2). Кроме того, вы не можете перебирать for file_name in src_files_filt:, потому что src_files_filt в вашем коде не является списком, скорее это имя одного файла.

Попробуйте следующее:

import os 
import shutil 
src = input('Enter the source folder'); 
dest = input('Enter the destination folder'); 
src_files = os.listdir(src) 
src_files_filt = [] 
with open("image_numbers.txt") as f: 
    for line in f: 
     numbers_str = line.rstrip() 
     #temp2 = "IMG_%s.jpg" %(numbers_str) #another str manipulation method 
     temp2 = str('IMG_')+numbers_str+str('.jpg') 
     #print(temp2) 
     for name_im in src_files: 
      print(name_im) 
      print(name_im == temp2) 
      if name_im == temp2: 
       src_files_filt.append(temp2) 

for file_name in src_files_filt: 
    #print(file_name) 
    full_file_name = os.path.join(src, file_name) 
    #print(full_file_name) 
    if (os.path.isfile(full_file_name)): 
     shutil.copy(full_file_name, dest)enter code here 
Смежные вопросы