Python:如何基于文件名迭代文件集?

时间:2015-11-06 00:32:33

标签: python bash perl file loops

我有一组名为这样的文件:

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

再次改变

{d8, d16, d32 d64}   

一旦我能够像这样迭代,我需要从文件中进行一些信息处理。

2 个答案:

答案 0 :(得分:1)

对于发电机来说,这看起来不错。我刚刚为d,z和n做过,但它应该很容易推广到你的所有文件名字段:

...
<script>

$.get( "https://blockchain.info/q/totalbc", function(response) {
    var VALUE = +response;
    // If not NaN, get mathy!
    if(!isNaN(VALUE))
    {
        VALUE /= 100000000;
    }
    else
    {
       VALUE = "Uh oh... Cannot Math with " + response;
    }
    $("#BTCUSD").text(VALUE);
}, "json" );

</script>
...

答案 1 :(得分:0)

你可以像以下那样。它可能不是完全你想要的东西,因为你已经从你的问题中留下了一些重要的细节,但是我试图以一种让你轻松的方式编写它根据你的真实需要改变。

简而言之,它的作用是使用re模块将每个文件名分解为&#34;字段&#34;使用每个中找到的数值。这些值被赋予相应的名称作为临时字典,然后用于创建具有所需字段优先级的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']