我有一个文本文件(巨大的),所有数字之间用空格和制表符的组合分隔,小数点和小数点后用逗号分隔,而第一列是科学格式,下一列是数字,但用逗号。我只是把第一行作为数字放在这里:
0,0000000E00 -2,7599284 -1,3676726 -1,7231264 -1,0558825 -1,8871096 -3,0763804 -3,2206187 -3,2308111 -2,3147060 -3,9572818 -4,0232415 -4,2180738
该文件太大了, Notepad++ 无法处理它以将“,”转换为“。”
所以我要做的是:
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
我什至尝试使用数字,但这会导致将第一列分成两个数字:
最终我在使用 .replace 命令时得到的错误。我更喜欢将逗号转换为点,而不管像科学这样的令人不安的格式。我感谢您的帮助
ValueError: could not convert string to float: ' 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 个 Tab
第二行及以下:
第 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)
对于可能更强大的解决方案,如果存在两列可能被多个空白字符分隔的可能性,请使用
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)
关于python - 使用还包含科学数字格式的 python 将逗号转换为 txt 中的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59388247/