0

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

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

4 回答 4

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()调用产生的每一行的第一列。

于 2012-12-03T06:53:08.833 回答
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")]
于 2012-12-03T06:52:29.360 回答
2

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

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

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

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

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

于 2012-12-03T07:03:10.333 回答
1

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

gene_list = [row[0] for row in csv.reader(open("genelist.csv"))]
于 2012-12-03T06:54:11.123 回答