2016-04-30 77 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