我从这段代码中得到了一个列表,我只想要一个列表。我错过了什么?基因 list.csv 是一个简单的 csv 文件,每行一个元素。此代码在单独的列表中生成每个基因的列表,例如:[['IFNAR2'], ['AKT1'], ['AKT2'], ['IFNAR1']]
gene_list = list(csv.reader(open("genelist.csv")))
如果您的所有文件包含每行一个元素,请不要使用该csv
模块。直接读取文件即可:
gen_list = open('genelist.csv').read().splitlines()
该csv
模块用于每行解析多个逗号、空格或制表符分隔的值,因此每行都作为列列表返回。
如果您必须使用csv
该文件,“展开”生成的嵌套列表很容易:
gene_list = [g[0] for g in csv.reader(open("genelist.csv"))]
这是一个列表理解,它采用csv.reader()
调用产生的每一行的第一列。
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")]
这是预期的行为。从 csv 模块文档:
从 csv 文件读取的每一行都作为字符串列表返回。
您的文件每行有一个项目,因此您会得到一个包含一个项目的列表列表。要获取字符串列表,您可以执行以下操作:
with open("genelist.csv") as f:
f.readlines()
(您也必须从每个项目中删除换行符。)
您可以使用简单的列表推导来读取文件中的所有行。如果每行只有一个项目,不确定为什么要使用 csv 阅读器。
gene_list = [row[0] for row in csv.reader(open("genelist.csv"))]