2017-02-20 72 views
2

我試圖運行兩個操作:複製成千上萬的文件(按名稱過濾)到指定文件夾

  1. 含有一些標識(其導致文件名).txt文件開始,如果檢查該文件在一個文件夾內;
  2. 如果步驟1)爲true,則將該文件從該文件夾複製到指定的文件夾。

.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 

然後,我確定搜索和將文件複製到目標文件夾還有其他問題。主要問題是我不知道如何搜索input_folder中的fixed_prefix_111081.asc文件。

+2

嘗試'line.strip()'刪除結束line char(s) –

+0

@ Jean-FrançoisFabre謝謝,我處理了這個問題。我編輯了這個問題。 – mgri

回答

2
  • copyfile需要文件名作爲目的地。傳遞一個現有的目錄是不行的。使用copy處理這兩種情況下(目標目錄或目標文件)
  • 輸入文件似乎要傳遞沒有路徑。你不得不生成完整的文件名,如果你在input_folderos.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

相關問題