我有一个文本文件(巨大的),所有数字之间用空格和制表符的组合分隔,小数点和小数点后用逗号分隔,而第一列是科学格式,下一列是数字,但用逗号。我只是把第一行作为数字放在这里:
0,0000000E00 -2,7599284 -1,3676726 -1,7231264 -1,0558825 -1,8871096 -3,0763804 -3,2206187 -3,2306187 -3,2308111 -2614,26,404,3,5 2180738
该文件太大了,记事本++无法处理它以将“,”转换为“。”
所以我要做的是:
with open(file) as fp:
line = fp.readline()
cnt = 1
while line:
digits=re.findall(r'([\d.:]+)', line)
s=line
s = s.replace('.','').replace(',','.')
number = float(s)
cnt += 1
Run Code Online (Sandbox Code Playgroud)
我什至尝试使用数字,但这会导致将第一列分成两个数字:
最终我在使用 .replace 命令时得到的错误。我更喜欢将逗号转换为点,而不管像科学这样的令人不安的格式。我感谢您的帮助
ValueError异常:无法将字符串转换为浮动:'00000000E00
\ T-29513521 \ T-17002219 \ T-22375536 \ T-14994097
\ T-24163610 \ T-34076621 \ T-31233623 \ T-32341597
\ T-24724552 \ T- 42434935 \t-43454237 \t-44885144
\n'
我还将输入在 txt 中的样子以及我在输出中需要它的方式(以 csv 格式)
输入看起来像这样:
第一行 :
第 1 列和第 2 列之间:3 个空格 + 1 个 Tab
其余列之间:6 个空格 + 1 个制表符
第二行及以下:
第 1 列和第 2 列之间:2 个空格 + 1 个 Tab
其余列之间:6 个空格 + 1 个制表符
这是txt输入文件的屏幕截图: 注意:每行开头有一个空格
我想要的输出是带有分隔列的csv 文件,带有“;”
您可以尝试将整个文件读入 Python 字符串,然后将逗号全局替换为点:
data = ""
with open('nums.csv', 'r') as file:
data = file.read().replace(',', '.').replace(' ', ';')
with open("nums_out.csv", "w") as out_file:
out_file.write(data)
Run Code Online (Sandbox Code Playgroud)
对于可能更强大的解决方案,如果存在两列可以由多个空格字符分隔的可能性,请使用re.sub:
data = ""
with open('nums.csv', 'r') as file:
data = file.read().replace(',', '.')
data = re.sub(r'(?<=\n|^)[^\S\r\n]+', '', data)
data = re.sub('(?<=\S)[^\S\r\n]+', ';', data)
Run Code Online (Sandbox Code Playgroud)