[英]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.