CSV阅读器问题

时间:2012-12-03 06:48:09

标签: python csv

我从这段代码中获取了一个列表列表,我只想要一个列表。我错过了什么?基因list.csv是一个简单的csv文件,每行一个元素。此代码在单独的列表中生成每个基因的列表,如:[['IFNAR2'], ['AKT1'], ['AKT2'], ['IFNAR1']]

gene_list = list(csv.reader(open("genelist.csv")))

4 个答案:

答案 0 :(得分:3)

如果您的所有文件包含每行一个元素,请不要使用csv模块。只需直接阅读文件:

gen_list = open('genelist.csv').read().splitlines()

csv模块用于解析每行的多个逗号,空格或制表符分隔值,因此每行都作为列列表返回。

如果您必须使用csv作为文件,则“展开”生成的嵌套列表非常简单:

gene_list = [g[0] for g in csv.reader(open("genelist.csv"))]

这是一个列表理解,它采用csv.reader()调用产生的每一行的第一列。

答案 1 :(得分:2)

csv.reader作为csv中的列表返回行上的迭代器。 list创建迭代器列表,以便您看到列表列表。

您可能希望使用itertools.chain链接生成的行迭代器。

gene_list = list(itertools.chain(*csv.reader(open("genelist.csv"))))

如果你得到的是每行一个基因,csv不是一个好选择。而只是遍历文件并从中创建一个列表

map(str.strip, open("genelist.csv"))

或作为LC

[e.strip() for e in open("genelist.csv")]

答案 2 :(得分:2)

这是预期的行为。从csv模块文档:

  

从csv文件读取的每一行都作为字符串列表返回。

您的文件每行有一个项目,因此您可以获得包含一个项目的列表列表。要获取字符串列表,您可以执行以下操作:

with open("genelist.csv") as f:
    f.readlines()

(你也必须从每个项目中删除换行符。)

答案 3 :(得分:1)

您可以使用简单的列表推导来读取文件中的所有行。如果你每行只有一个项目,不知道你为什么要使用csv阅读器。

gene_list = [row[0] for row in csv.reader(open("genelist.csv"))]