Повторная запись чисел записывает байтовые литералы в мой файл csv?

Я использовал следующий тестовый код

import numpy as np import csv data = np.zeros((3,),dtype=("S24,int,float")) with open("testtest.csv", 'w', newline='') as f: writer = csv.writer(f,delimiter=',') for row in data: writer.writerow(row) 

И данные в файле csv имеют теги b '' (байтовые теги букв) для строковых компонентов массива записей. Каким образом можно обрабатывать запись в csv этих массивов записей и лучший способ избежать наличия байтовых литеральных тегов в моем файле csv?

2 Solutions collect form web for “Повторная запись чисел записывает байтовые литералы в мой файл csv?”

Я думаю, вы работаете с Python3, который использует unicode как тип строки по умолчанию. байтовые строки затем получают специальную маркировку b .

Если я генерирую данные с помощью unicode вместо байтов, это работает:

 In [654]: data1 = np.zeros((3,),dtype=("U24,int,float")) In [655]: data1['f0']='xxx' # more interesting string field In [656]: with open('test.csv','w') as f: writer=csv.writer(f,delimiter=',') for row in data1: writer.writerow(row) In [658]: cat test.csv xxx,0,0.0 xxx,0,0.0 xxx,0,0.0 

np.savetxt делает то же самое:

 In [668]: np.savetxt('test.csv',data1,fmt='%s',delimiter=',') In [669]: cat test.csv xxx,0,0.0 xxx,0,0.0 xxx,0,0.0 

Вопрос в том, могу ли я обойти это, сохранив поле S24 ? Например, открыв файл как wb ?

Я исследовал этот вопрос ранее в https://stackoverflow.com/a/27513196/901925 Trying to strip b' ' from my Numpy array

Похоже, мои решения состоят в том, чтобы либо decode поле байта, либо напрямую писать в байтовый файл. Поскольку в вашем массиве есть сочетание строковых и числовых полей, решение decode немного утомительно.

 data1 = data.astype('U24,i,f') # convert bytestring field to unicode 

Вспомогательная функция может использоваться для decode байтовых строк «на лету»:

 In [147]: fn = lambda row: [j.decode() if isinstance(j,bytes) else j for j in row] In [148]: with open('test.csv','w') as f: writer=csv.writer(f,delimiter=',') for row in data: writer.writerow(fn(row)) .....: In [149]: cat test.csv xxx,0,0.0 yyy,0,0.0 zzz,0,0.0 

Вам нужны данные во всех этих трех типах? Рассмотрите возможность использования numpy.savetxt () в массиве numpy float или integers.

http://docs.scipy.org/doc/numpy/reference/generated/numpy.savetxt.html

 data = np.zeros((3,3)) filename='foo' np.savetxt(filename+".csv",data,fmt='%1.6e',delimiter=",") #fmt='%1.6e' controls how the numbers are written to the text file. #Eg use fmt='%d' for integers Имя data = np.zeros((3,3)) filename='foo' np.savetxt(filename+".csv",data,fmt='%1.6e',delimiter=",") #fmt='%1.6e' controls how the numbers are written to the text file. #Eg use fmt='%d' for integers 
  • многоцветная ошибка тепловой карты Python
  • PyInstaller - нет модуля с именем
  • Изменить матрицу на xAxis и заполнить средним значением в Python?
  • Каковы различия между Pandas и NumPy + SciPy в Python?
  • Сортировка данных массива по общей дате
  • Как обновить окно imshow () matplotlib в интерактивном режиме?
  • Опустить линии соединения в графике matplotlib, например y = tan (x)
  • как скопировать значение массива numpy в более высокие размеры
  • Python - лучший язык программирования в мире.