2015-12-02 60 views
0

我與XYZ文件座標通過一些軟件在固定的列寬,包括空格和前導零的方式產生空間:NumPy的loadtxt刪除前導零(轉換),並定義分隔符

00666666.66  07777777.77  0000333.33 

使用行:

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

更新:感謝下面的答案,我意識到前導零不是numpy.loadtxt的問題 - 它會自動剝離它們。在這種情況下,我的問題是如何在值之間存在最小值爲1或更多的空間時指定分隔符()。我發現沒有指定分隔符它的作用,但我有一個原因,我必須指定它。

+0

之前已經提到過 - 'loadtxt'接受可迭代,包括一個生成器。所以你可以創建一個函數來讀取一行,按下它並將它傳遞給'loadtxt'。 – hpaulj

+0

剛纔我發現'np.genfromtxt'接受一個字段寬度列表作爲'delimiter'。這可能是默認空格分隔符的替代方法。 – hpaulj

回答

1

在我的快速測試的前導零不給的問題:

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

是這樣的,任何機會,製表符分隔?

+0

我剛剛檢查了小樣本,你是對的。它正在定義引起麻煩的分隔符。我不能忽略分隔符的定義,要更新問題... – Miro

+0

在我的測試'拆分'與'',產生大量的空字符串。 – hpaulj

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'