python - 使用还包含科学数字格式的 python 将逗号转换为 txt 中的点

标签 python text

我有一个文本文件(巨大的),所有数字之间用空格和制表符的组合分隔,小数点和小数点后用逗号分隔,而第一列是科学格式,下一列是数字,但用逗号。我只是把第一行作为数字放在这里:

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 

我什至尝试使用数字,但这会导致将第一列分成两个数字:

output-digits

最终我在使用 .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 输入文件 :
关注:每行开头有一个空格

input-txt

以及我想要的 输出是 csv 文件 用“;”分隔列

enter image description here

最佳答案

您可以尝试将整个文件读入 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/

相关文章:

python - SIGKILL 在一个简单的 python 脚本中添加列

javascript - 根据背景图片动态调整文字颜色

python - 切片字符串的方法?

python - pygtk:如何在gtk.EntryCompletion中设置弹出窗口的高度

Javascript:如何将用户生成的文本存储在 javascript 的变量中?

python - 将控制台输入行保持在输出下方

android - 图像识别在android中将图像转换为文本

java - 尝试在对象类中创建一个将文本文件划分为多个部分的函数(Java)

python - 如何在 Python 中将整个列表作为命令行参数传递?

python - Mongoengine 查询设置为列表转换