【问题标题】:How to sort file names numerically如何按数字对文件名进行排序
【发布时间】:2016-05-03 19:10:59
【问题描述】:

我有这样的文件名:savedrecs(1)、savedrecs(2)...savedrecs(11) 等,我使用代码:

import sys
import os
import glob
directory = ["A", "B", "C", "D", "E"]

for folder in directory:
    for file in glob.glob(os.path.join(folder, "savedrecs(*).txt")):
        print file
        with open(file) as f:
            a=sum(not line.strip() for line in f)
            print a

这里,(*) 代表文件编号。但是,当我运行代码时,结果分别对应编号为 1,11,12,13,2,3,4 的文件,而不是这个首选顺序:1,2,3,4,(...), 11,12,13。有没有办法可以将 * 定义为整数,然后以某种方式使其适应此代码?

【问题讨论】:

  • 也许您可以将其保留为元组(11, "savedrecs(11).txt") 并对元组进行排序。

标签: python list python-2.7 sorting integer


【解决方案1】:

也许是……

import sys
import os
import glob
directory = ["A", "B", "C", "D", "E"]

files = sorted(glob.glob(folder+'/directory*/savedrec*'))
for i in files:
    print i
    with open(i) as f:
        a=sum(not line.strip() for line in f)
        print a   

【讨论】:

    【解决方案2】:

    此函数应将数字视为 int 而不是字符串,并进行适当的排序

    fns = ['savedrecs('+str(i)+').txt' for i in range(1,20)]
    def key_fn(x):
        return int(re.findall(r"savedrecs\((\d+)\).txt", fns[0])[0])
    
    print sorted(fns, key=key_fn)
    

    所以在你的代码中,你可以有这样的东西:

    for file in sorted(glob.glob(os.path.join(folder, "savedrecs(*).txt")), key = key_fn):
    

    【讨论】:

      【解决方案3】:

      加勒特 R,我想你的意思是这样的:

      def key_fn(x):
          return int(re.findall(r"savedrecs\((\d+)\).txt", x)[0])
      

      【讨论】:

        猜你喜欢
        • 2019-04-12
        • 1970-01-01
        • 2013-05-29
        • 2021-05-08
        • 1970-01-01
        • 2012-04-01
        • 2017-11-23
        • 2018-11-10
        • 2018-05-05
        相关资源
        最近更新 更多