Загрузка файла в массив numpy с помощью python

Итак, я очень зелёный с Python и пытаюсь учиться, реплицируя некоторый код matlab, который я написал. У меня есть часть, где в Matlab я загружаю файл данных с разделителями табуляции. Синтаксис

x = load(data.txt)

Получает данные с разделителями табуляции и помещает их в ячейки матрицы с меткой x.

Есть ли способ сделать это в python, но с данными с разделителями-запятыми?

Ответ 1

Существует несколько методов, выберите наиболее подходящий для вашего приложения.

Если вы работаете с numpy, может быть неплохо использовать numpy load, loadtxt, fromfile или genfromtxt, потому что после предварительной обработки ваш файл будет загружен в подходящую структуру.

Но если вы не собираетесь работать с numpy (или любой другой большой библиотекой, которая имеет некоторые функции загрузки файлов), это может быть чрезмерным использованием ее только для загрузки файла... Рассмотрим использование встроенных функций python, или csv из стандартной библиотеки... Это будет намного более гибким и более плавным.

Вот как, используя примеры с помощью file.txt (значения каждой строки разделяются вкладками):

1   2   3   4
7   8   9   10  11  12
13  14  15

встроенный python

Нет модуля для импорта, довольно простой, гибкий, хороший вариант для большинства ситуаций, imho.

Загрузка файла в двоичном режиме для чтения (rb flags) в таблице (список списков значений, разделенных в файле с вкладками) с помощью только встроенных функций:

>>> file = open('file.txt', 'rb')
>>> table = [row.strip().split('\t') for row in file]

CSV

модуль csv из стандартной библиотеки также довольно прост.

Обратите внимание, что вместо CSV значения Comma Separated Values ​​фактически отсутствуют, и вы можете выбрать любой разделитель, который вы хотите. Поэтому CSV означает все файлы, ориентированные на ячейки или таблицы.

Загрузка файла в двоичном режиме для чтения (rb flags) в таблице (список списков значений, разделенных в файле с вкладками) с помощью csv reader:

>>> import csv
>>> file = open('file.txt', 'rb')
>>> data = csv.reader(file, delimiter='\t')
>>> table = [row for row in data]

Доступ к ячейкам

Таблица была загружена аналогично двум предыдущим примерам, и к данным таблицы можно получить доступ, например, table[row][col]:

>>> table
[['1', '2', '3', '4'], ['7', '8', '9', '10', '11', '12'], ['13', '14', '15']]    
>>> table[0]
['1', '2', '3', '4']
>>> table[1][2]
9

Ответ 2

Если вы используете Python для MATLAB-подобных целей, вы захотите использовать NumPy (и scipy); в частности, вы должны прочитать NumPy для пользователей MATLAB.

Если у вас есть данные с разделителями-запятыми, вы можете использовать numpy.loadtxt для его чтения (после установки numpy, конечно):

$ cat matrix.csv 
1,2,3
4,5,6
7,8,9

а затем

>>> import numpy as np
>>> m = np.loadtxt("matrix.csv", delimiter=",")
>>> m
array([[ 1.,  2.,  3.],
       [ 4.,  5.,  6.],
       [ 7.,  8.,  9.]])
>>> np.matrix(m)
matrix([[ 1.,  2.,  3.],
        [ 4.,  5.,  6.],
        [ 7.,  8.,  9.]])

Ответ 3

В стандартной библиотеке есть модуль csv.

См. документацию здесь

>>> import csv
>>> spamReader = csv.reader(open('eggs.csv', 'rb'), delimiter=' ', quotechar='|')
>>> for row in spamReader:
...     print ', '.join(row)
Spam, Spam, Spam, Spam, Spam, Baked Beans
Spam, Lovely Spam, Wonderful Spam

Ответ 4

Функция numpy.loadtxt считывает данные из файла ASCII в массив numpy. Строка, используемая для разделения значений, может быть определена аргументом разделителя:

numpy.loadtxt('data.txt', delimiter=',')

Для более сложных случаев функция numpy.genfromtxt является очень хорошей альтернативой.

Ответ 5

Смотрите модуль csv (в частности класс reader) и/или numpy.loadtxt.