2015-12-02 2 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

В моей быстрой проверке ведущих 0s не дает проблему:

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

It создает массив поплавков.

Эта строка, по умолчанию 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

В моем тесте 'split' with '', выдает много пустых строк. – 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' 
Смежные вопросы