2015-05-21 60 views
1

我正在嘗試將與.tif圖像關聯的相關文件分組。您可以從列表中看到每個組有7個相關文件。我正在尋找將這些文件分組的方法,以便我可以通過shutil.move()將它們移動到各種文件夾中。如何分組相關的.tif文件?

以下腳本是我根據this answer嘗試失敗的原因。結果與輸入files列表相同。

我該如何調整這個來執行我之後的分組?

import os, itertools 

files = ['F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511759_sw.tfw', 
     'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511759_sw.tif', 
     'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511759_sw.tif.aux.xml', 
     'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511759_sw.tif.ovr', 
     'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511759_sw.tif.vat.cpg', 
     'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511759_sw.tif.vat.dbf', 
     'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511759_sw.tif.xml', 
     'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511760_sw.tfw', 
     'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511760_sw.tif', 
     'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511760_sw.tif.aux.xml', 
     'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511760_sw.tif.ovr', 
     'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511760_sw.tif.vat.cpg', 
     'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511760_sw.tif.vat.dbf', 
     'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511760_sw.tif.xml'] 

test = sorted(files) 
grouped = [list(g) for _, g in itertools.groupby(test, lambda x: x.split('_')[1])] 

預期輸出:

[['F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511759_sw.tfw', 
      'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511759_sw.tif', 
      'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511759_sw.tif.aux.xml', 
      'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511759_sw.tif.ovr', 
      'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511759_sw.tif.vat.cpg', 
      'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511759_sw.tif.vat.dbf', 
      'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511759_sw.tif.xml'], 
      ['F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511760_sw.tfw', 
      'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511760_sw.tif', 
      'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511760_sw.tif.aux.xml', 
      'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511760_sw.tif.ovr', 
      'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511760_sw.tif.vat.cpg', 
      'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511760_sw.tif.vat.dbf', 
      'F:\\juniper_project\\data\\raster\\deliverables\\OR\\reclass\\reclass_4511760_sw.tif.xml']] 

回答

1

關閉!分割清單上的指標是一次性的,它應該是2

嘗試

grouped = [list(g) for _, g in itertools.groupby(test, lambda x: x.split('_')[2])] 
+0

謝謝,我注意到,它的作品在這個例子中,但如果有一個名爲4511760_se'文件',它會被集中到'文件[1]'中,因爲'se'方向不被考慮。我想一個(不太靈活的)解決方法是分割路徑:'[list(g)for _,g in itertools.groupby(test,lambda x:x [63:73])]' – Borealis

+0

如果你'請確保您的密鑰始終是數字,您可以在列表中篩選該密鑰,而不是嘗試按索引選擇密鑰 – canyon289