如果想要组合六行(每行包含3个元素),那么最终结果是一行包含三个元素,以便第一个是所有第一个元素的添加,第二个是添加所有第二个元素第三是所有第三要素的连接。
例如,
我们有,
12.34 -79 x
-3.5 23 y
32.2E2 2 z
4.23e-10 +45 x
62E+2 -4 y
0.0 0 z
我们需要
9428.84 -13 xyzxyz
这是我目前的代码:
f = open('data.txt', 'r')
""" opens the file """
import re
""" Imports the regular expressions module"""
# lines = f.readlines ()
lines = list(f)
""" Reads all the lines of the file """
p = re.compile(r'\s*^([-]?([1-9]\d|\d)[E|e]?[+\d]?(.)(\d+(E|e)[-]?\d+|\d+))\s*([-,+]?([1-9]\d+|\d))\s*([x|y|z])$')
for x in lines:
m = p.match(x)
if m:
print (x)
答案 0 :(得分:0)
您可以通过zipping
文件的内容执行此操作,以便第一列的所有编号都在第一个列表中,第二列的第二列的所有编号以及最后第三个列表上的所有字符。然后您只需sum
前两个列表,join
包含字符的第三个列表:
sum1 = 0
sum2 = 0
finalStr = ""
with open("data.txt", "r") as infile:
lines = list(zip(*[line.split() for line in list(infile)]))
sum1 = sum(map(float,lines[0]))
sum2 = sum(map(float,lines[1]))
finalStr = "".join(lines[2])
# Some formatting for float numbers
print("{:.2f}".format(sum1), end=" ")
print("{:.0f}".format(sum2), end=" ")
print(finalStr)
输出:
9428.84 -13 xyzxyz
答案 1 :(得分:-1)
您的案例中不需要正则表达式。正则表达式用于解构字符串,而不是组合它们。如果您不介意使用pandas,解决方案需要两行:
import pandas as pd
data = pd.read_table("data.txt", sep='\s+', header=None)
df.sum().values.tolist()
#[9428.840000000422, -13, 'xyzxyz']