提取文件夹中文件名的第一个和第二个下划线之间的字符串的脚本,并显示此类文件的计数

2024-06-28 20:06:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我在linux文件夹中有特定格式的文件名。我想提取这些文件名的第一个和第二个下划线之间的字符串,并计算该文件夹中的此类文件类型。文件名如下:

2305237803310_ABC_A05_1378414278883.hl7

20132480014907_DEF_R01_1378420192336.hl7

20132480014793_DEF_R01_1378418604889.hl7

2313642803310_ABC_A08_1378824296915.hl7

2313614403310_ABC_A08_1378823995805.hl7

2313614403310_MNY_A08_1378823995805.hl7

等等

我的脚本输出应该给我:

^{pr2}$

Tags: 字符串脚本文件夹文件名linuxdef格式文件类型
3条回答

使用defaultdictCounter或{}或{}习惯用法来计算它们。以下是__missing__

txt='''\
2305237803310_ABC_A05_1378414278883.hl7
20132480014907_DEF_R01_1378420192336.hl7
20132480014793_DEF_R01_1378418604889.hl7
2313642803310_ABC_A08_1378824296915.hl7
2313614403310_ABC_A08_1378823995805.hl7
2313614403310_MNY_A08_1378823995805.hl7'''

class Dicto(dict):
    def __missing__(self, key):
        self[key]=0
        return self[key]

d=Dicto()      
for line in txt.splitlines():
    k=line.split('_')       
    d[k[1]]+=1

print d  
# {'MNY': 1, 'ABC': 3, 'DEF': 2}

使用dict和split很容易:

s = ["2305237803310_ABC_A05_1378414278883.hl7","20132480014907_DEF_R01_1378420192336.hl7","20132480014793_DEF_R01_1378418604889.hl7",
     "2313642803310_ABC_A08_1378824296915.hl7","2313614403310_ABC_A08_1378823995805.hl7","2313614403310_MNY_A08_1378823995805.hl7"]

resultsDict = {}    
for value in s:

    m = value.split("_")

    if len(m) > 2:    
       myString = m[1]    
       if myString in resultsDict:
           resultsDict[myString] += 1
       else:
           resultsDict.update({myString: 1})    
    else:
        print "error in the string! there are less then 2 _"

print resultsDict

输出:

^{pr2}$

我会用正则表达式,操作系统列表目录和一个记录计数的口述。类似这样的问题相对紧凑,该方法可以推广到其他类似的问题。在

import re
import os
import collections


def print_names():
    names_count = collections.Counter()
    regex = r'[^_]+_([^_]*)_.*'
    for file_name in os.listdir("."):
        match = re.match(regex, file_name)
        if match:
            names_count[match.groups()[0]] += 1

    for name, count in names_count.items():
        print(name, count)


if __name__ == "__main__":
    print_names()

输出示例文件: 作业成本3 MNY 1公司 定义2

相关问题 更多 >