在python中使用reg-ex组合行
如果想要组合六行(每个包含3个元素),那么最终结果是一行包含三个元素,第一行是所有第一个元素的相加,第二行是所有第二个元素的相加,第三行是所有第三个元素的串联 比如说, 我们有在python中使用reg-ex组合行,python,regex,Python,Regex,如果想要组合六行(每个包含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
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)
在您的情况下,不需要正则表达式。正则表达式用于解构字符串,而不是组合字符串。如果您不介意使用pandas,解决方案有两行:
import pandas as pd
data = pd.read_table("data.txt", sep='\s+', header=None)
df.sum().values.tolist()
#[9428.840000000422, -13, 'xyzxyz']
您可以通过压缩文件内容来实现这一点,这样第一列的所有数字都在第一个列表中,第二列的所有数字都在第二个列表中,最后是第三个列表中的所有字符。然后,您只需将前两个列表和包含字符的第三个列表合并即可:
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
请给出解释当前代码问题的答案。还要注意的是,docstring与注释不同,注释只是重复代码所说的问题。是否必须使用
regex
获得所需的结果?