繁体   English   中英

替换文本中的空格(多行)

[英]Replace spaces from text (multiple lines)

我正在准备一些 data.txt 用作 csv。 我的数据如下:

 0    PT  TY LAB    PAR(0)        L2-NORM         U(1)          U(2)          U(3)          U(4)          U(5)          U(6)     
   1     1   9   1   3.00000E+01   1.41129E+02   1.50000E+00  -3.33011E-11   3.59422E+01   5.05825E-10   1.23750E+02   1.05732E-09
   1    -2   0   0   2.99960E+01   1.41123E+02   1.49980E+00   0.00000E+00   3.59238E+01   0.00000E+00   1.23750E+02   0.00000E+00

如果我使用

with open('data.txt', mode='r') as csv_file:
 csv_reader = csv.DictReader(csv_file)
 line_count = 0
 for row in csv_reader:
     if line_count == 0:
         print(f'Column names are {", ".join(row)}')
         line_count += 1
     print(row)
     line_count += 1

我会得到一列而不是 12

我首先使用 data.strip() 从左侧和右侧删除空格。 然后,我想用逗号替换空格以将数据正确读取为 csv。 当我使用

re.sub(r"\s+", ",", data))

我得到

0,PT,TY,LAB,PAR(0),L2-NORM,U(1),U(2),U(3),U(4),U(5),U(6),1,1,9,1,3.00000E+01,1.41129E+02,1.50000E+00,-3.33011E-11,3.59422E+01,5.05825E-10,1.23750E+02,1.05732E-09,...

他们不再按行组织

当我使用

data.translate({ord(c): ',' for c in string.whitespace}))

它用逗号替换每个空格并将所有内容写在一行中

0,,,,PT,,TY,LAB,,,,PAR(0),,,,,,,,L2-NORM,,,,,,,,,U(1),,,,,,,,,,U(2),,,,,,,,,,U(3),,,,,,,,,,U(4),,,,,,,...

我想知道是否有办法获得

0,PT,TY,LAB,PAR(0),L2-NORM,U(1),U(2),U(3),U(4),U(5),U(6)     
1,1,9,1,3.00000E+01,1.41129E+02,1.50000E+00,-3.33011E-11,3.59422E+01,5.05825E-10,1.23750E+02,1.05732E-09
1,-2,0,0,2.99960E+01,1.41123E+02,1.49980E+00,0.00000E+00,3.59238E+01,0.00000E+00,1.23750E+02,0.00000E+00

如果您的 csv 包含问题中的文本,您可以放置​​分隔符,如下所示:

import re
import csv

with open('data.csv', newline='') as csvfile:
    reader = csv.DictReader(re.sub(r'\s+', ',', line.strip()) for line in csvfile)
    for row in reader:
        print(dict(row))

打印两行:

{'0': '1', 'PT': '1', 'TY': '9', 'LAB': '1', 'PAR(0)': '3.00000E+01', 'L2-NORM': '1.41129E+02', 'U(1)': '1.50000E+00', 'U(2)': '-3.33011E-11', 'U(3)': '3.59422E+01', 'U(4)': '5.05825E-10', 'U(5)': '1.23750E+02', 'U(6)': '1.05732E-09'}
{'0': '1', 'PT': '-2', 'TY': '0', 'LAB': '0', 'PAR(0)': '2.99960E+01', 'L2-NORM': '1.41123E+02', 'U(1)': '1.49980E+00', 'U(2)': '0.00000E+00', 'U(3)': '3.59238E+01', 'U(4)': '0.00000E+00', 'U(5)': '1.23750E+02', 'U(6)': '0.00000E+00'}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM