5

因此,我对 Python 非常熟悉,并且正在尝试通过复制我编写的一些 matlab 代码来学习。我有一个部分,在 matlab 中,我加载了一个制表符分隔的数据文件。语法

x = load(data.txt)

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

有没有办法在 python 中做到这一点,但使用逗号分隔的数据?

4

5 回答 5

17

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

如果您正在使用numpy,最好使用 numpy 的load、或函数loadtxt,因为您的文件将在预处理后加载到合适的结构中。fromfilegenfromtxt

但是,如果您不打算使用 numpy (或任何其他具有某些文件加载​​功能的大型库),那么仅将其用于加载文件将是一种矫枉过正...考虑使用内置的 python 函数或 csv取而代之的是标准库中的模块……它将更加灵活,并且更加流畅。

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

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

内置python

没有要导入的模块,非常简单,灵活,在大多数情况下都是不错的选择,恕我直言。

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

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

CSV

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

请注意,虽然 CSV 表示逗号分隔值,但实际上没有标准,您可以选择任何您想要的分隔符。因此 CSV 代表所有面向单元格或类似表格的文件。

使用 csv以二进制模式加载文件以rb在表(值列表列表,在文件中用制表符分隔)中读取(标志)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
于 2012-06-07T21:18:16.367 回答
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.]])
于 2012-06-07T18:49:45.073 回答
2

标准库中有一个 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
于 2012-06-07T18:48:00.500 回答
2

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

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

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

于 2012-06-07T18:51:33.650 回答
0

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

于 2012-06-07T18:50:49.490 回答