Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用reg-ex组合行_Python_Regex - Fatal编程技术网

在python中使用reg-ex组合行

在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

如果想要组合六行(每个包含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)

在您的情况下,不需要正则表达式。正则表达式用于解构字符串,而不是组合字符串。如果您不介意使用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
获得所需的结果?