在python中使用reg ex组合行

时间:2018-02-21 21:24:30

标签: 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')
""" 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)

2 个答案:

答案 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']