gpt4 book ai didi

Python 脚本匹配文件名中的特定文本并计算此类文件的数量

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:41 24 4
gpt4 key购买 nike

在一个文件夹中,我有包含以下文件名的文件:

Q1234_ABC_B02_12232.hl7

12313_SDDD_Q03_44545.hl7

Q43434_SAD_B02_2312.hl7

4324_SDSD_W05_344423423.hl7

3123123_DSD_D06_67578.hl7

还有很多这样的文件

我需要编写一个python脚本来计算文件名以“Q”开头并且在第二个下划线后有“B02”的文件的数量,这意味着我应该得到输出计数为2。我已经尝试了以下方法脚本但没有得到所需的解决方案。

    import re
import os

resultsDict = {}
myString1 = ""
regex = r'[^_]+_([^_]*)_.*'
for file_name in os.listdir("."):

m = file_name.split("_")

if len(m) > 2 :
myString = m[2]

if "B02" in myString:
myString1 = myString

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

print resultsDict

我使用的是Python 2.6.6。任何帮助都会有用。

最佳答案

截至撰写本文时,有几个答案的正则表达式错误。

其中一个可能更好:

r'^Q[^_]*_[^_]*_B02_.*'

r'^Q[^_]*_[^_]*_B02.*'

r'^Q[^_]*_[^_]*_B02(_.*|$)'

如果您坚持使用 .*,则正则表达式可能会消耗一些中间下划线。因此,您不再能够强制执行 B02第二 _

之后

之后,匹配值( re.match )的测试是对各种文件名( os.listdirglob.glob )的简单循环。这是使用列表理解的示例:

>>> l = [file for file in os.listdir(".") if re.match(r'^Q[^_]*_[^_]*_B02.*', file)]
>>> l
['Q1234_ABC_B02_12232.hl7', 'Q43434_SAD_B02_2312.hl7']
>>> len(l)
2

为了获得更好的性能,您可能希望首先编译正则表达式 ( re.compile )。

<小时/>

正如上面 @camh 的评论,让我觉得你可能已经跳入 Python 了,因为你找不到基于 shell 的解决方案,以下是如何仅使用 bash 做同样的事情:

sh$ shopt -s extglob
sh$ ls Q*([^_])_*([^_])_B02*
Q1234_ABC_B02_12232.hl7 Q43434_SAD_B02_2312.hl7
sh$ ls Q*([^_])_*([^_])_B02* | wc -l
# ^^^^^^^
# This *won't* work if some file names contain '\n' !!!

关于Python 脚本匹配文件名中的特定文本并计算此类文件的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25054899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com