将CSV文件转换为Python列表

5
我正在尝试将CSV文件中的数据转换成Python列表。目前我已经完成了以下代码:
import csv

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

print(M[0])

我试图打印列表中的第一项,以确认代码是否工作(目前不工作)。我得到了以下错误:
TypeError:'_csv.reader'对象不可下标化。
在我查看的每个示例中,它似乎应该是可下标的,所以我不确定发生了什么。

顺便问一下,你是在使用Python 2还是Python 3?你的print语法看起来像是Python 3,但是你的open语法看起来像是Python 2。(如果是Python 3,你需要使用open(filename, 'r', newline='')而不是open(filename, 'rb') - DSM
谢谢。这是3。解决了我的下一个问题。现在它按照我想要的方式工作。 - AwayFromMyDesk
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
< p > csv.reader 返回的对象是可迭代的,但不是一个序列,因此不能进行下标操作。请注意,如果您尝试在 with 语句之外使用 reader,文件将已关闭,并且会出现错误 - 直到请求行时文件才实际读取。


"_csv.Error: iterator should return strings, not bytes" 不是解决方案。 - fsalazar_sch
@fsalazar_sch:无论是问题还是这个答案,它们都包含Python 2.7的代码,而你正在使用不兼容3.x Python的版本。 - Eric

3
这应该可以解决问题:
import csv

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

print(M[0])

1
为什么不直接使用M = list(csv etc)呢?反正我们是要一次性将所有东西全部用完。 - DSM

2

另一个选项是numpy.genfromtxt,例如:

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

这将使data成为一个numpy数组,其行数和列数与您的文件中相同。

1

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

next(M)

or

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

编辑以遵循 @Eric 的弃用提示。

2
请注意,iterator.next()已被弃用,应使用next(iterator) - Eric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接