2015-11-06 63 views
-3

我有一组名为像这样的文件:Python:如何迭代基于文件名的文件集?

qd-p64-dZP-d64-z8-8nn.q   
qd-p8-dPZ-d8-z1-1nn.q    qq-p8-dZP-d8-z1-2nn.q 
qd-p8-dPZ-d8-z1-2nn.q    qq-p8-dZP-d8-z1-4nn.q 
qd-p8-dPZ-d8-z1-4nn.q    qq-p8-dZP-d8-z16-1nn.q 
qd-p8-dPZ-d8-z16-1nn.q   qq-p8-dZP-d8-z16-2nn.q 
qd-p8-dPZ-d8-z16-2nn.q   qq-p8-dZP-d8-z16-4nn.q 
qd-p8-dPZ-d8-z16-4nn.q   qq-p8-dZP-d8-z16-8nn.q 
qd-p8-dPZ-d8-z16-8nn.q   qq-p8-dZP-d8-z1-8nn.q 
qd-p8-dPZ-d8-z1-8nn.q    qq-p8-dZP-d8-z2-1nn.q 
qd-p8-dPZ-d8-z2-1nn.q    qq-p8-dZP-d8-z2-2nn.q 
qd-p8-dPZ-d8-z2-2nn.q    qq-p8-dZP-d8-z2-4nn.q 
qd-p8-dPZ-d8-z2-4nn.q    qq-p8-dZP-d8-z2-8nn.q 
qd-p8-dPZ-d8-z2-8nn.q    qq-p8-dZP-d8-z32-1nn.q 
qd-p8-dPZ-d8-z32-1nn.q   qq-p8-dZP-d8-z32-2nn.q 
qd-p8-dPZ-d8-z32-2nn.q   qq-p8-dZP-d8-z32-4nn.q 
qd-p8-dPZ-d8-z32-4nn.q   qq-p8-dZP-d8-z32-8nn.q 
qd-p8-dPZ-d8-z32-8nn.q   qq-p8-dZP-d8-z4-1nn.q 
qd-p8-dPZ-d8-z4-1nn.q    qq-p8-dZP-d8-z4-2nn.q 
qd-p8-dPZ-d8-z4-2nn.q    qq-p8-dZP-d8-z4-4nn.q 

遍历在文件名中给出的信息。例如:

修复

dZP, 1nn, z2, 

和变化

d 

与值

{d8, d16, d32 d64} 

然后,增加Z值以获得

dZP, 1nn, z4 

和d再次

{d8, d16, d32 d64} 

变化一旦我能够重复这样的,我需要从文件中做一些信息处理。

+2

欢迎StackOverflow上。请阅读并遵守帮助文档中的发布准则。 [MCVE](http://stackoverflow.com/help/mcve)适用于此处。在您发布代码并准确描述问题之前,我们无法有效帮助您。 – Prune

+1

“2nn”和“4nn”文件如何?那么'qd'和'qp'呢?这里的所有示例文件都是'd8'? “p8”(你根本没有提到)呢?你需要提供一个更明确的指示,说明你在这里实际尝试做什么。你只是想按特定文件名字段的特定顺序遍历文件吗? –

+0

@EtanReisner,是的,我还需要使用2nn和4nn,我只是使用以前的值编写了示例,并且是的,我需要按特定文件名字段的特定顺序迭代文件,我无法弄清楚如何浏览文件名以遍历整个字段集。 –

回答

1

看起来像一个发电机的好任务。我只是做了它d,z和N,但它应该是很容易推广到所有的文件名的字段:

def filename_generator(): 
    l1 = ['d8', 'd16', 'd32', 'd64'] 
    l2 = ['z1', 'z2', 'z4', ,'z8', 'z16', 'z32'] 
    l3 = ['1nn', '2nn', '4nn', '8nn'] 
    for n in l3: 
     for z in l2: 
      for d in l1: 
       yield '%s-%s-%s.q' % (d, z, n) 
0

,你可以像下面这样。这可能不是准确的你想要什么,因为你已经留下了一些重要的细节问题,但我试图用一种方式编写它,以便根据你真正的需要改变它想。

简而言之,它所做的就是使用re模块将每个文件名分隔到每个文件夹中的数字值的“字段”中。这些值被分配相应的名称,它是一个临时字典,然后用它来创建具有所需字段优先级的值的namedtuple。文件名的其他部分被忽略。

可以使用os.listdir()glob.glob()从文件系统获取初始文件名列表。在列表中的文件名

from collections import namedtuple 
import re 

filenames = ['qd-p64-dZP-d64-z8-8nn.q', 'qd-p8-dPZ-d8-z1-1nn.q', 
      'qd-p8-dPZ-d8-z1-2nn.q', 'qd-p8-dPZ-d8-z1-4nn.q', 
      'qd-p8-dPZ-d8-z16-1nn.q', 'qd-p8-dPZ-d8-z16-2nn.q', 
      'qd-p8-dPZ-d8-z16-4nn.q', 'qd-p8-dPZ-d8-z16-8nn.q', 
      'qd-p8-dPZ-d8-z1-8nn.q', 'qd-p8-dPZ-d8-z2-1nn.q', 
      'qd-p8-dPZ-d8-z2-2nn.q', 'qd-p8-dPZ-d8-z2-4nn.q', 
      'qd-p8-dPZ-d8-z2-8nn.q', 'qd-p8-dPZ-d8-z32-1nn.q', 
      'qd-p8-dPZ-d8-z32-2nn.q', 'qd-p8-dPZ-d8-z32-4nn.q', 
      'qd-p8-dPZ-d8-z32-8nn.q', 'qd-p8-dPZ-d8-z4-1nn.q', 
      'qd-p8-dPZ-d8-z4-2nn.q', 'qq-p8-dZP-d8-z1-2nn.q', 
      'qq-p8-dZP-d8-z1-4nn.q', 'qq-p8-dZP-d8-z16-1nn.q', 
      'qq-p8-dZP-d8-z16-2nn.q', 'qq-p8-dZP-d8-z16-4nn.q', 
      'qq-p8-dZP-d8-z16-8nn.q', 'qq-p8-dZP-d8-z1-8nn.q', 
      'qq-p8-dZP-d8-z2-1nn.q', 'qq-p8-dZP-d8-z2-2nn.q', 
      'qq-p8-dZP-d8-z2-4nn.q', 'qq-p8-dZP-d8-z2-8nn.q', 
      'qq-p8-dZP-d8-z32-1nn.q', 'qq-p8-dZP-d8-z32-2nn.q', 
      'qq-p8-dZP-d8-z32-4nn.q', 'qq-p8-dZP-d8-z32-8nn.q', 
      'qq-p8-dZP-d8-z4-1nn.q', 'qq-p8-dZP-d8-z4-2nn.q', 
      'qq-p8-dZP-d8-z4-4nn.q'] 

filename_order = ('p', 'd', 'z', 'nn') # order fields occur in the filenames 
fieldname_order = ('z', 'd', 'p', 'nn') # desired field sort order 
OrderedTuple = namedtuple('OrderedTuple', fieldname_order) 

def keyfunc(filename): 
    values = [int(value) for value in re.findall(r'-\D*(\d+)', filename)] 
    parts = dict(zip(filename_order, values)) 
    return OrderedTuple(**parts) 

filenames.sort(key=keyfunc) # sort filename list in-place 

的排序结果:

['qd-p8-dPZ-d8-z1-1nn.q', 'qd-p8-dPZ-d8-z1-2nn.q', 'qq-p8-dZP-d8-z1-2nn.q', 
'qd-p8-dPZ-d8-z1-4nn.q', 'qq-p8-dZP-d8-z1-4nn.q', 'qd-p8-dPZ-d8-z1-8nn.q', 
'qq-p8-dZP-d8-z1-8nn.q', 'qd-p8-dPZ-d8-z2-1nn.q', 'qq-p8-dZP-d8-z2-1nn.q', 
'qd-p8-dPZ-d8-z2-2nn.q', 'qq-p8-dZP-d8-z2-2nn.q', 'qd-p8-dPZ-d8-z2-4nn.q', 
'qq-p8-dZP-d8-z2-4nn.q', 'qd-p8-dPZ-d8-z2-8nn.q', 'qq-p8-dZP-d8-z2-8nn.q', 
'qd-p8-dPZ-d8-z4-1nn.q', 'qq-p8-dZP-d8-z4-1nn.q', 'qd-p8-dPZ-d8-z4-2nn.q', 
'qq-p8-dZP-d8-z4-2nn.q', 'qq-p8-dZP-d8-z4-4nn.q', 
'qd-p64-dZP-d64-z8-8nn.q', 'qd-p8-dPZ-d8-z16-1nn.q', 
'qq-p8-dZP-d8-z16-1nn.q', 'qd-p8-dPZ-d8-z16-2nn.q', 
'qq-p8-dZP-d8-z16-2nn.q', 'qd-p8-dPZ-d8-z16-4nn.q', 
'qq-p8-dZP-d8-z16-4nn.q', 'qd-p8-dPZ-d8-z16-8nn.q', 
'qq-p8-dZP-d8-z16-8nn.q', 'qd-p8-dPZ-d8-z32-1nn.q', 
'qq-p8-dZP-d8-z32-1nn.q', 'qd-p8-dPZ-d8-z32-2nn.q', 
'qq-p8-dZP-d8-z32-2nn.q', 'qd-p8-dPZ-d8-z32-4nn.q', 
'qq-p8-dZP-d8-z32-4nn.q', 'qd-p8-dPZ-d8-z32-8nn.q', 
'qq-p8-dZP-d8-z32-8nn.q']