以下是开始使用的代码。
#!/usr/bin/python
import glob
import re
path = '/home/lhco/f1/*.cut'
files=glob.glob(path)
i=0
for i in range(len(files)):
x = files[i]
h = x
i += 1
f = open(h)
for line in f:
x = re.findall("([0-9\.[0-9][e][+-][0-9]+)",line)
pb = map(float, x)
if "ESC_00" in line: print pb
现在,输出是目录中3个文件的3个数字列表。我想要做的是尝试从第一个列表中取每个第一个元素,第二个等,并将其添加到下一个列表的第一个元素,第二个,等等。我尝试在“pb”上再次使用map和sum和zip但这似乎没什么帮助。 初始输出如下:
[0.08]
[0.009]
[0.0]
[0.0]
[0.0]
[0.0]
[0.03]
[0.005]
[0.0]
[0.0]
[0.0]
[0.0]
[0.08]
[0.008]
[0.0]
[0.0]
[0.0]
[0.0]
是否可以将所有6个数字组的第一个元素相互添加?我需要在这里尝试一下元组吗?
文件示例:
0 EVENTS SURVIVE AUXILIARY CUTS WITH 0.000e+00 PB RESIDUAL CROSS SECTION
EVENT SELECTION EFFICIENCY IS 100.000 PERCENT
CUT_KEY SURVIVE PB_AREA %_LOCAL %_TALLY
ESC_001 38 2.3e-02 007.317 007.317
ESC_002 9 5.5e-03 076.316 078.049
ESC_003 0 0.0e+00 100.000 100.000
ESC_004 0 0.0e+00 000.000 100.000
ESC_005 0 0.0e+00 000.000 100.000
ESC_006 0 0.0e+00 000.000 100.000
答案 0 :(得分:1)
results = []
for filename in files:
with open(filename, 'r') as file:
result = []
for line in file:
match = map(float, re.findall("([0-9\.[0-9][e][+-][0-9]+)", line))
result.extend(match)
results.append(result)
answer = zip(*results)
这会为每个文件构建result
个列表,并列出results
个列表,然后将它们压缩以形成answer
,这是一个元组列表:
>>> zip(*results)
[(0.08, 0.03, 0.08),
(0.009, 0.005, 0.008),
(0.0, 0.0, 0.0),
(0.0, 0.0, 0.0),
(0.0, 0.0, 0.0),
(0.0, 0.0, 0.0)]
此外,正则表达式中存在拼写错误(请参阅regex101):
([0-9\.[0-9][e][+-][0-9]+)
解析
( [0-9\.[0-9] [e] [+-] [0-9]+ )
当我想你想要的时候:
( [0-9] \. [0-9] [e] [+-] [0-9]+ )
可以简化为(regex101):
\d\.\de[+-]\d+