我有很多文件,我已将所有文件名保存到filelists.txt
。这是一个示例文件:
cpu_H1_M1_S1.out
cpu_H1_M1_S2.out
cpu_H2_M1_S1.out
cpu_H2_M1_S2.out
当程序在文件名中检测到_H
,_M
,_S
时。我需要输出之后出现的数字。例如:
_H _M _S
1 1 1
1 1 2
2 1 1
2 1 2
谢谢。
答案 0 :(得分:2)
你可以使用正则表达式:
>>> s = 'cpu_H2_M1_S2.out'
>>> re.findall(r'cpu_H(\d+)_M(\d+)_S(\d+)', s)
[('2', '1', '2')]
如果它与格式不完全匹配,那么您将得到一个空列表,可用于忽略结果。如果你愿意的话,你可以调整它以将str转换为int:
[int(i) for i in re.findall(...)]
答案 1 :(得分:0)
使用regex
:
In [13]: with open("filelists.txt") as f:
for line in f:
data=re.findall(r"_H\d+_M\d+_S\d+",line)
if data:
print [x.strip("HMS") for x in data[0].split("_")[1:]]
....:
['1', '1', '1']
['1', '1', '2']
['2', '1', '1']
['2', '1', '2']
答案 2 :(得分:0)
虽然我对正则表达式本身没有任何反对意见,但我觉得这个问题太过分了。这是一个更轻松的解决方案:
five = operator.itemgetter(5)
seven = operator.itemgetter(7)
nine = operator.itemgetter(9)
with open("filelists.txt") as f:
for line in f:
return [(int(five(line)), int(seven(line)), int(nine(nine))) for line in f]
希望有所帮助