使用python将文件加载到numpy数组中

时间:2012-06-07 18:43:31

标签: python csv file-io numpy

所以我对Python非常环保,并试图通过复制我编写的一些matlab代码来学习。我有一个部分,在matlab中,我加载了一个制表符分隔的数据文件。语法

x = load(data.txt)

获取制表符分隔的数据并将其放入标记为x的矩阵的单元格中。

有没有办法在python中执行此操作,但使用逗号分隔的数据?

5 个答案:

答案 0 :(得分:17)

有几种方法,请选择最适合您应用的方法。

如果您正在使用numpy,那么使用numpy的loadloadtxtfromfilegenfromtxt函数可能是个好主意,因为在预处理之后,您的文件将被加载到合适的结构中。

但是如果您不打算使用numpy(或任何其他具有一些文件加载​​功能的 big 库),那么仅仅用于加载文件就太过分了......考虑一下使用内置的python函数,或者使用标准库中的csv module ......它会更灵活,更顺畅。

以下是使用file.txt的示例(每行的值用制表符分隔)的方法:

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

内置的python

无需导入模块,非常简单,灵活,适合大多数情况,imho。

以二进制模式加载文件以读取表中的值(rb标志)(值列表列表,在文件中用标签分隔),只有内置函数:

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

CSV

标准库中的csv module也非常简单。

请注意,altough CSV表示逗号分隔值,实际上没有标准,您可以选择所需的任何分隔符。因此,CSV代表所有面向细胞或类似文件的文件。

使用csv reader

以二进制模式加载文件以读取表中的值(rb标志列表)(值列表列表,在文件中用标签分隔)
>>> 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

答案 1 :(得分:10)

如果您使用Python进行类似MATLAB的目的,那么您将希望使用NumPy(和scipy);特别是,您应该阅读NumPy for MATLAB Users

如果你有逗号分隔的数据,你可以使用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.]])

答案 2 :(得分:2)

标准库中有一个csv模块。

See the documentation here

>>> 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

答案 3 :(得分:2)

numpy.loadtxt函数将ASCII文件中的数据读入numpy数组。用于分隔值的字符串可以使用delimiter参数定义:

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

对于更复杂的情况,numpy.genfromtxt函数是一个非常好的选择。

答案 4 :(得分:0)

请参阅csv模块(特别是reader类)和/或numpy.loadtxt功能。