将 .CSV 文件转换为 Python 中的列表
Posted
技术标签:
【中文标题】将 .CSV 文件转换为 Python 中的列表【英文标题】:Transefrring .CSV file to a list in Python 【发布时间】:2013-08-13 02:04:33 【问题描述】:我正在尝试将数据从 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
在我看到的每个示例中,它似乎应该是可下标的,所以我不确定发生了什么。
【问题讨论】:
旁白:您使用的是 Python 2 还是 Python 3?您的print
语法使它看起来像 Python 3,但您的 open
使它看起来像 Python 2。(如果是 Python 3,您需要使用 open(filename, 'r', newline='')
而不是 open(filename, 'rb')
。
谢谢。是 3。这解决了我的下一个问题。它现在按我的意愿工作。
【参考方案1】:
所有这些都会起作用:
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
返回的对象是可迭代的,但不是序列,所以不能下标。请注意,如果您尝试在 with 语句之外使用 reader
,则该文件将被关闭,并且会出错 - 直到您请求这些行,该文件才真正被读取。
【讨论】:
"_csv.Error: 迭代器应该返回字符串,而不是字节" 不是解决方案【参考方案2】:这应该可以解决问题:
import csv
with open('RawEirgrid2.csv','rb') as csvfile:
M = list(csv.reader(csvfile, delimiter=','))
print(M[0])
【讨论】:
.. 为什么不简单地M = list(csv etc)
,如果我们一次都用尽了呢?【参考方案3】:
M 实际上是一个可迭代的,而不是一个列表。您可以使用以下
next(M)
或
l=[k for k in M]
print l[0]
针对@Eric 的弃用提示进行了编辑。
【讨论】:
请注意,iterator.next()
已弃用,取而代之的是 next(iterator)
【参考方案4】:
另一个选项是numpy.genfromtxt
,例如:
import numpy as np
data = np.genfromtxt("yourfile.dat",delimiter=",")
这将使 data
成为一个 numpy 数组,其中包含与文件中一样多的行和列
【讨论】:
以上是关于将 .CSV 文件转换为 Python 中的列表的主要内容,如果未能解决你的问题,请参考以下文章