Numpy loadtxt删除前导零(转换)并定义空格分隔符

时间:2015-12-02 01:20:05

标签: python numpy converter

我有一些软件用一些软件以固定列宽(包括空格和前导零)的方式生成的文件:

00666666.66     07777777.77     0000333.33

使用line:

data = np.loadtxt(input_xyz, delimiter = " ", skiprows = 0, unpack = True)

更新:感谢下面的答案,我意识到前导零不是numpy.loadtxt的问题 - 它会自动剥离它们。在这种情况下,我的问题是如何在值之间至少有1个或更多空间时指定delimiter()。我在没有指定分隔符的情况下发现了它的工作原理,但我有理由说明它必须指定它。

2 个答案:

答案 0 :(得分:1)

在我的快速测试中,领先的0不会出现问题:

In [442]: np.loadtxt([b'00666666.66     07777777.77     0000333.33'])
Out[442]: array([  6.66666660e+05,   7.77777777e+06,   3.33330000e+02])

它产生一系列花车。

此字符串使用默认split生成

In [446]: b'00666666.66     07777777.77     0000333.33'.split()
Out[446]: [b'00666666.66', b'07777777.77', b'0000333.33']

有一个空格:

In [448]: b'00666666.66     07777777.77     0000333.33'.split(b' ')
Out[448]: 
[b'00666666.66',
 b'',
 b'',
 b'',
 b'',
 b'07777777.77',
 b'',
 b'',
 b'',
 b'',
 b'0000333.33']

这是产生错误的空字符串之一:b''

这是否有任何机会,制表符分隔?

答案 1 :(得分:0)

您可以使用正则表达式删除前导零,但必须注意各种情况:

>>> import re
>>> input_xyz = '0012.0034  00000000  00000.12  -012.0034'
>>> re.sub(r'(?m)(^[+-]?|\s+[+-]?)(0(?=\d))+', r'\1', input_xyz)
'12.0034  0  0.12  -12.0034'