LINUX.ORG.RU

numpy.recfromcsv - как считывать строки+числа?

 


0

1

Есть скрипт:

#!/usr/bin/python3.2
import numpy

arr1 = numpy.recfromcsv(
  "test01.txt",
  dtype = [int, "|U8"],
  names = ["0", "1"],
  usecols = range(0-1)
)
print(arr1)
print(type(arr1[1][1]))
Он считывает файл:
1,"A B C"
2,'C D E'
И выдаёт такое:
[(1, b'"A B C"') (2, b"'C D E'")]
<class 'numpy.bytes_'>

Как бы сделать, чтобы модуль numpy грузил и хранил не numpy._bytes, а строки произвольной длины (str)?
В dtype есть только что-то вроде «|S5». То есть, строки фиксированной ширины.

★★★★★

Ответ на: комментарий от aedeph_

Что-то типа этого?

arr1_list = []
for row in arr1:
  row_new = []
  for item in row:
    if type(item) == numpy.bytes_:
      row_new.append(item.decode("utf-8"))
    else:
      row_new.append(item)
  arr1_list.append(row_new)
  print(row_new)
print(arr1_list)

pacify ★★★★★
() автор топика
Ответ на: комментарий от aedeph_

Ты забыл про обработку quotes в csv-файле. Это немного сложнее - там ещё экранирование символов надо учитывать.
Я вначале так и считывал, как список списков, разделяя строки сплитом.

pacify ★★★★★
() автор топика
Последнее исправление: pacify (всего исправлений: 1)
Ответ на: комментарий от aedeph_

Вообще, для этого модуль csv есть.

Да, можно его заюзать. Я так раньше и делал.

Но данные мне нужно иметь в именованных столбцах numpy,
чтобы можно было сделать arr1.sort(order=str_col_name).

Чтобы не делать дополнительную перегонку из list(list) ->
numpy.ndarray, я и попытался грузить данные напрямую, через
np.recfromcsv().

pacify ★★★★★
() автор топика
Ответ на: комментарий от aedeph_

(int(y[0]), y[1])

Да, так и сделал. Спасибо.

pacify ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.