我有很多文件,我保存了所有文件名到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
谢谢。
我有很多文件,我保存了所有文件名到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
谢谢。
像这样使用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']
你可以使用正则表达式:
>>> 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(...)]
虽然我对正则表达式本身没什么,我认为这是矫枉过正了这个问题。这里是一个轻量级的解决方案:
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]
希望帮助
什么范围内的数字你要选择,为H,M和S?另外,你的问题是不明确的。请发布你已经尝试过的所以我们可以找出你想要做什么 – inspectorG4dget
所有的文件名都有'_H','_M','_S'吗?如果缺少什么东西呢? –
这些数字是WEKA中使用的参数。 我想要这些数字来创建一个报告。 – ikwangz