2015-09-28 21 views
0

我見過很多人問關於通過文件夾搜索和創建文件列表的問題,但我還沒有發現任何幫助我做相反的事情。使用列表來查找和移動特定的文件-python 2.7

我有一個文件及其擴展名列表(xxx0.laz,xxx1.laz,xxx2.laz等)的csv文件。我需要通讀這個列表,然後搜索這些文件的文件夾。然後我需要將這些文件移動到另一個文件夾。

到目前爲止,我已經採取了csv並創建了一個列表。起初,我在列表中遇到了麻煩。每行最後都有一個「\ n」,所以我刪除了這些。從我發現的唯一另一個例子... [How do I find and move certain files based on a list in excel?。所以我從列表中創建了一個集合。但是,我不確定爲什麼或者如果我需要它。

因此,這裏是我有:

id = open('file.csv','r') 
list = list(id) 
list_final = ''.join([item.rstrip('\n') for item in list]) 
unique_identifiers = set(list_final) 

os.chdir(r'working_dir') # I set this as the folder to look through 
destination_folder = 'folder_loc' # Folder to move files to 
for identifier in unique_identifiers: 
    for filename in glob.glob('%s_*' % identifier)" 
     shutil.move(filename, destination_folder) 

我一直在想這個( '%S_ *' %標識符)與水珠功能。我還沒有找到任何這方面的例子,也許這需要改變?

當我這樣做時,我什麼都沒有得到。沒有錯誤,沒有實際的文件移動...

也許我正在走這個錯誤的方式,但這是我迄今爲止發現的唯一的東西。

+0

你能給真正的例子什麼csv包含? –

+2

您閱讀了文件的所有行,然後將它們合併成一行,其中包含所有文件名,然後創建一個包含單個項目的集合 - 這是行不通的。你(可能)不需要這個集合,並且你不需要'.join()'。您也可以將其描述爲CSV,但您可以將它視爲代碼,就好像它只是列表中的文件名一樣。數據是以逗號分隔的嗎? – TessellatingHeckler

+0

@TessellatingHeckler是的,csv用逗號分隔。 例如: 20131217_483500e_4217500n.laz,20131217_483000e_4217500n.laz,20131125_483500e_4217000n.laz,等... 我給其他的鏈接把列表轉換成一組,但我不知道爲什麼。 .join()是爲了擺脫\ n。當我用line.split()編寫列表時,我嘗試從列表中的每一行中剝離\ n,但我一直收到諸如「line.strip()」之類的錯誤,但聲稱行未定義。或類似的東西。 –

回答

0

它真的並不難:

for fname in open("my_file.csv").read().split(","): 
    shutil.move(fname.strip(),dest_dir) 

你不需要一大堆的東西......

此外,如果你只是想在源目錄中的所有* .laz文件你不需要一個csv在所有...

for fname in glob.glob(os.path.join(src_dir,"*.laz")): 
    shutil.move(fname,dest_dir) 
+0

我還沒有得到它的工作......我如何設置要搜索的文件夾?我是否簡單地將它設置爲工作目錄並將csv放在那裏?當我嘗試在另一個文件夾中使用csv時,我不斷收到錯誤,說它是無效模式('r')或文件名。所以我把它放在同一個文件夾中,並沒有得到那個錯誤,但我一直得到一個TypeError:必須是(緩衝區溢出),而不是str。 –

+0

非常感謝,我們終於能夠開始工作。我注意到的一件事是,我需要對它進行操作以使其工作。如果我包含可能位於其他文件夾中的文件,它會掛起並聲明文件或目錄不存在。但是謝謝你的幫助。 –

相關問題