将 .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 中的列表的主要内容,如果未能解决你的问题,请参考以下文章

将 .CSV 文件转换为 Python 中的列表

使用python将csv文件转换为元组列表

在 Python 中将文本表转换为 CSV

csv文件的创建和打开

Python将列表中的字符串转换为数字

如何将 csv 字符串转换为 pandas 中的列表?