2016-07-21 4 views
1

Имея структурированный массив как это:Проблемы с параметром новой строки в Numpy функции savetxt

[ (b'H', 0.9425, 0.1412, 7.1414) ... (b'N', 1.0037, 4.0524, 6.8000)]

Я хочу сделать .txt file использованием numpy.savetxt, где каждый элемент массива записывается в отдельной строке:

H 0.9425 0.1412 7.1414 
N 1.0037 4.0524 6.8000 

Я установил newline='\n', но он не работает должным образом, и все элементы написаны в одной строке. Эта же проблема с заголовок параметр, указанный заголовок также печатается в той же строке.

Теперь это выглядит следующим образом:

29Shifts: 1.0 3.0 7.0b'C' 1.0029 3.5098 7.9883 b'N' 1.0039 4.0586 6.8008 
29Shifts: 1.0 4.0 0.0b'C' 1.0029 4.5078 0.9873 b'N' 1.0039 5.0586 -0.2000 
29Shifts: 1.0 5.0 9.0b'C' 1.0029 5.5078 9.9844 b'N' 1.0039 6.0586 8.7969 

Вот параметры, используемые:

np.savetxt(outfile, recarray, fmt=[b'%s','%-7.4f','%-7.4f','%-7.4f'], delimiter=' ', newline='\n', header='29\nShifts: 1.0 1.0 3.5\n', comments='') 

Спасибо

+0

Не могли бы вы напечатать juste 2-3 строки необработанных данных? Не массив – Deadpool

ответ

0

Интересно, есть ли проблема с \n в вашей системе; возможно, Python использует одно значение, в то время как ваш просмотрщик файлов ожидает другого (существуют стандарты dos, linux и mac).

У меня нет проблем с этими данными и форматированием в сеансе Ipython на машине linux.

In [88]: d=[ (b'H', 0.9425, 0.1412, 7.1414),(b'N', 1.0037, 4.0524, 6.8000)] 
In [89]: data=np.array(d,'|S1,f,f,f') 
In [90]: data 
Out[90]: 
array([(b'H', 0.9424999952316284, 0.1412000060081482, 7.14139986038208), 
     (b'N', 1.0037000179290771, 4.0524001121521, 6.800000190734863)], 
     dtype=[('f0', 'S1'), ('f1', '<f4'), ('f2', '<f4'), ('f3', '<f4')]) 

In [91]: np.savetxt('test.txt', data,fmt =[b'%s','%-7.4f','%-7.4f','%-7.4f']) 

In [92]: cat test.txt 
b'H' 0.9425 0.1412 7.1414 
b'N' 1.0037 4.0524 6.8000 

In [93]np.savetxt('test.txt', data,fmt=[b'%s','%-7.4f','%-7.4f','%-7.4f'], 
    delimiter=' ', newline='\n', header='29\nShifts: 1.0 1.0 3.5\n', comments ='') 

In [94]: cat test.txt 
29 
Shifts: 1.0 1.0 3.5 

b'H' 0.9425 0.1412 7.1414 
b'N' 1.0037 4.0524 6.8000 
+1

Фактически, я устанавливаю 'newline = '\ r \ n'', и теперь он работает. Я использовал простой блокнот Windows, чтобы открыть файл. но я не понимаю, почему 'newline = '\ n'' не работает. btw, с 'newline = '\ n'' Я могу открыть файл в UEDIT32, а затем нет проблем. –

+0

Windows использует 2 символа в конце строки, 'return' и 'newline'. Unix использует только один. Python, работающий в Windows, должен знать об этом и использовать двойной символ. Но файл, написанный на Linux-машине, может потребоваться преобразовать, если он переносится в Windows. Но лучшие редакторы могут обрабатывать любой стиль (или MAC-адрес). – hpaulj

+0

ОК, теперь я понял. один мелкий вопрос кроме того. как избавиться от знаков b перед письмами? Потому что я хотел бы иметь такую ​​линию ** H 0.9425 0.1412 7.1414 **. Должен ли я заменить первый столбец на новый, полученный путем редактирования старого с помощью метода '.decode ('UTF-8')? Спасибо –

Смежные вопросы