5

我正在尝试将数据从 CSV 文件获取到 Python 中的列表。这是我到目前为止所拥有的:

import csv


with open('RawEirgrid2.csv','rb') as csvfile:

    M = csv.reader(csvfile, delimiter=',')


print(M[0])

我正在尝试打印列表中的第一项,只是确认代码正在工作(目前没有)。我收到以下错误:

TypeError: '_csv.reader' object is not subscriptable

在我看到的每个示例中,它似乎应该是可下标的,所以我不确定发生了什么。

4

4 回答 4

6

所有这些都将起作用:

with open('RawEirgrid2.csv', 'rb') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    print next(reader)
with open('RawEirgrid2.csv', 'rb') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    lines = list(reader)

print lines[0]
with open('RawEirgrid2.csv', 'rb') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    for line in reader:
        print line
        break  # stop after the first line

返回的对象csv.reader是可迭代的,但不是序列,所以不能下标。请注意,如果您尝试reader在 with 语句之外使用,该文件将被关闭,并且会出错 - 直到您请求这些行,该文件才真正被读取。

于 2013-08-11T18:58:20.487 回答
3

这应该可以解决问题:

import csv

with open('RawEirgrid2.csv','rb') as csvfile:
    M = list(csv.reader(csvfile, delimiter=','))

print(M[0])
于 2013-08-11T18:56:23.973 回答
1

M 实际上是一个可迭代的,而不是一个列表。您可以使用以下

next(M)

或者

l=[k for k in M]
print l[0]

针对@Eric 的弃用提示进行了编辑。

于 2013-08-11T19:00:26.160 回答
1

另一种选择是numpy.genfromtxt,例如:

import numpy as np
data = np.genfromtxt("yourfile.dat",delimiter=",")

这将创建data一个具有与文件中一样多的行和列的 numpy 数组

于 2013-08-11T20:02:03.073 回答