2015-09-12 268 views
1

我知道這個問題已經得到解答,但是我的應用程序使用瞭解決方案,但是我面臨的錯誤無法解決。將文件夾從文件夾複製到文件夾python

我有一個文本文件中的數字列表,表示應複製的圖像編號。這份名單是與此類似

7348 
    7352 
    7357 
    7360 
    7380 
    7381 
    . 
    . 
    . 

的圖像與名字

IMG_7348.jpg 
    IMG_7349.jpg 
    . 
    . 
    . 

從文本文件中使用的數字,我想只有那些影像複製到不同的文件夾。這是Python代碼我爲同一

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. 寫道當我使用打印語句,我能看到改革後的圖像名稱,並從SRC的名字是相同的,但聲明

    print(name_im == temp2) 
    

給我

false 

我無法找出原因

你能幫我解決這個錯誤嗎?作爲python的初學者,如果錯誤是基本的,請和我一起裸照。

+0

我編輯我的解釋爲問題1,我認爲只是由於print語句的位置說明。 – qwertyuip9

回答

1

我不太確定爲什麼2個錯誤發生。你詳細描述的第二個問題對我來說並沒有發生,但是我修復了你的代碼,使它更加清潔和更加pythonic。 「src_files_filt」會出現問題,因爲最後一個for循環將其重複爲一個列表,但「src_files_filt」只是一個字符串。我做了這樣的事情,腳本在匹配文件名後立即執行文件更改。

編輯:再次查看問題1的程序,其中一些值應該返回false,因爲存在其他文件不在文本文件中。如果將print語句放在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

打印(STR(name_im)== TEMP2)返回true

+0

謝謝隊友。得到它了 –

1

您已經打開"image_numbers.txt"並通過各行迭代,所以你並不需要再次打開它遍歷脫光「 \ N」。

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

這可以通過條帶化 「\ n」 個迭代for line in f時更容易實現。當我運行你的代碼時,它並沒有刪除「\ n」,這使得它無法評估的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 
相關問題