2016-04-30 56 views
0

我必須從文件夾中的文件名中識別和隔離數字序列,並且可選地識別非連續序列。這些文件是.dpx文件。幾乎沒有文件命名結構,除了文件名中的某個地方是一個序列號,並且擴展了「.dpx」。有一個叫做PySeq的精彩模塊,可以完成所有的辛勤工作,除了炸彈目錄有數千個,有時還有數十萬個文件。 「參數列表太大」。有沒有人具有處理序列號隔離和dpx文件的經驗?每個文件最大可達100MB。我正在使用Python2.7開發一個CentOS框。文件名可能是這樣的:
test00_take1_00001.dpx
test00_take1_00002.dpx
another_take_ver1-0001_3.dpx
another_take_ver1-0002_3.dpx
(連續兩個序列)文件名序列提取python

+0

什麼是你的代碼,產生錯誤? –

回答

0

這應該做的正是你在做什麼尋找。它將創建一個包含字符串開始和結束的字典並將完整字符串放入列表中。

然後將加入所有列表到一個列表(你不妨跳過這一部分,並把它變成列表的發電機關於內存更高的效率)

from collections import defaultdict 

input_list = [ 
    "test00_take1_00001.dpx", 
    "test00_take1_00002.dpx", 
    "another_take_ver1-0001_3.dpx", 
    "another_take_ver1-0002_3.dpx"] 

results_dict = defaultdict(lambda: defaultdict(list)) 
matches = (re.match(r"(.*?[\W_])\d+([\W_].*)", item) for item in input_list) 
for match in matches: 
    results_dict[match.group(1)][match.group(2)].append(match.group(0)) 

results_list = [d2 for d1 in results_dict.values() for d2 in d1.values()] 

>>> results_list 
[['another_take_ver1-0001_3.dpx', 'another_take_ver1-0002_3.dpx'], ['test00_take 
1_00001.dpx', 'test00_take1_00002.dpx']] 
+0

謝謝Bharel!這很好。我對發電機一無所知,所以這是一個很好的激勵措施。 :)非常感謝。 – tinker242

+0

Hi @ tinker242如果這個或任何答案已經解決了您的問題,請點擊複選標記,考慮[接受它](http://meta.stackexchange.com/q/5234/179419)。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。沒有義務這樣做。 – Bharel

+0

對不起。我在這裏還是有點新的。你的回答絕對能解決我的問題。 :) – tinker242