Python CSV阅读器问题
我从这个代码中得到一个列表,我只想要一个列表。我错过了什么?gene list.csv是一个简单的csv文件,每行一个元素。此代码在单独的列表中生成每个基因的列表,如:Python CSV阅读器问题,python,csv,Python,Csv,我从这个代码中得到一个列表,我只想要一个列表。我错过了什么?gene list.csv是一个简单的csv文件,每行一个元素。此代码在单独的列表中生成每个基因的列表,如:[['IFNAR2']、['AKT1']、['AKT2']、['IFNAR1'] gene_list = list(csv.reader(open("genelist.csv"))) 以csv中的列表形式返回行的迭代器。列表创建迭代器的列表,以便您看到列表的列表 您可能希望使用链接生成的行迭代器 如果你得到的是每行一个基因,cs
[['IFNAR2']、['AKT1']、['AKT2']、['IFNAR1']
gene_list = list(csv.reader(open("genelist.csv")))
以csv中的列表形式返回行的迭代器。列表
创建迭代器的列表,以便您看到列表的列表
您可能希望使用链接生成的行迭代器
如果你得到的是每行一个基因,csv不是一个好的选择。而只是迭代文件并从中创建一个列表
map(str.strip, open("genelist.csv"))
还是信用证
[e.strip() for e in 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阅读器
gene_list = [row[0] for row in csv.reader(open("genelist.csv"))]
这是预期的行为。从csv模块文档中: 从csv文件读取的每一行都作为字符串列表返回 您的文件每行有一项,因此您将获得一个包含一项的列表列表。要获取字符串列表,可以执行以下操作:
with open("genelist.csv") as f:
f.readlines()
(您还必须从每个项目中删除换行符。)@MartijnPieters:谢谢,修复了。非常好。谢谢你的解释,你的第一个解决方案很好用。我想这里有一点是关于关闭文件的;除非我误解了匿名文件句柄的处理方式。@BurhanKhalid:它们是自动关闭的。它们的引用计数下降到零,被垃圾收集器删除,这会触发对
.close()
的自动调用。吹毛求疵:“引用计数下降到零”并不意味着“被垃圾收集器删除”,尽管在当前版本的CPython中是这样的。你怎么会认为它是csv(“逗号分隔值”)档案?谢谢。我更了解csv模块,我感谢您的解释谢谢。我将研究使用itertools。可能对我的工作很有用。
with open("genelist.csv") as f:
f.readlines()