我从这段代码中获取了一个列表列表,我只想要一个列表。我错过了什么?基因list.csv是一个简单的csv文件,每行一个元素。此代码在单独的列表中生成每个基因的列表,如:[['IFNAR2'], ['AKT1'], ['AKT2'], ['IFNAR1']]
gene_list = list(csv.reader(open("genelist.csv")))
答案 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"))]