在列之间添加空间

时间:2019-03-19 16:01:21

标签: python

我有多个文件,下面有条目。列由单个空格分隔。挑战在于,在条目为负数的情况下,列之间的单个空格不会退出。如何在这些否定条目之间添加空格,以便轻松读取列?

例如

    1.034E+04-2.045E+04 2.34E-5 2.344E+04  
    2.064E-03-2.764E+06 2.35E-5 4.892E-04   
    2.064E-03-2.764E+06 2.35E-5 4.892E-04  
    2.459E+08-3.523E+08 4.78E-6-2.344E-06  
    ...

2 个答案:

答案 0 :(得分:2)

这是适用于此特定示例的简单方法(不需要RE)。您需要对文件中的每一行都执行此操作。

>>> '2.459E+08-3.523E+08 4.78E-6-2.344E-06'.replace('-', ' -').replace('E -', 'E-')
>>> '2.459E+08 -3.523E+08 4.78E-6 -2.344E-06'

说明:我们总是在减号之前插入一个空格,但是如果减号前面带有E,则我们会再次删除该空格。

这种逻辑易于阅读和遵循,比使用正则表达式的逻辑要快。

答案 1 :(得分:1)

如果已知源是固定的列宽文件-为什么不使用它:

L = 64     # length of one line
l = 16     # length of one number
with open(filename) as f:
    for line in f:
        print([float(line[i:i+l]) for i in range(0, L, l)])

# [100436070.5, -14.9785924, 20418483.379999999, 2.676474075e+17]

编辑:
如果您不希望它明确输入行和数字的长度,可以让它们从第一行开始计算,例如通过计算小数点:

n = 0
with open(filename) as f:
    for line in f:
        if not n:
            n = sum(c=='.' for c in line)
            L = len(line)
            l = L//n
        print([float(line[i:i+l]) for i in range(0, L, l)])