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

Numpy loadtxt remove leading zeros (convert) and define spaces delimiter

我有 XYZ 坐标的文件,这些文件由某些软件以固定列宽的方式生成,包括 spaces 和前导零:

00666666.66     07777777.77     0000333.33

使用线路:

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

更新:感谢下面的回答,我意识到前导零不是 numpy.loadtxt 的问题 - 它会自动将它们去掉。在这种情况下,我的问题是当值之间至少有 1 space 或更多时如何指定定界符 ()。我发现在没有指定定界符的情况下它可以正常工作,但我有理由必须指定它。

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

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

在我的快速测试中,前导 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']

有一个空格space:

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''

这是否是制表符分隔的?