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

  显示原文与译文双语对照的内容

我有一些文件,由一些软件生成的XYZ坐标,它的方式包括空格和前导零:


00666666.66 07777777.77 0000333.33



使用行:


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



更新:感谢下面的答案,我意识到前导零不是 numpy.loadtxt的问题- 它自动把它们去掉。 在本例中,我的问题是如何在最小 1个空格或者更多值之间指定分隔符( ) 。 如果没有指定分隔符,我发现它是 aromatically,但我有一个理由必须指定它。

时间: 原作者:

在我的快速测试中,前导 0s 没有给出问题:


In [442]: np.loadtxt([b'00666666.66 07777777.77 0000333.33'])


Out[442]: array([ 6.66666660e+05, 7.77777777e+06, 3.33330000e+02])



它生成一个浮点的array 。

这里字符串的默认 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''

这是有可能被分隔的?

原作者:

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


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



...