加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

以pythonic方式遍历csv.reader()

发布时间:2020-12-17 17:40:32 所属栏目:Python 来源:网络整理
导读:我正在开发一个程序,该程序使用csv.reader()读取csv等.我想将与两个条件之一匹配的变量保存在两个不同的类变量中.因为我喜欢编写列表推导,并且试图以一种更加Python化的方式编写代码,所以我想知道这是否是正确的方法. csv.reader()似乎是一个生成器对象,因为

我正在开发一个程序,该程序使用csv.reader()读取csv等.我想将与两个条件之一匹配的变量保存在两个不同的类变量中.因为我喜欢编写列表推导,并且试图以一种更加Python化的方式编写代码,所以我想知道这是否是正确的方法. csv.reader()似乎是一个生成器对象,因为我可以对其进行一次迭代.因此,对于第二种情况,我将第二次创建读取器对象.对我来说,这似乎是一种资源浪费.当然,我可以使用普通的for循环和不同的if情况编写它.但是,有没有更Python的方式来编写这段代码?

with open(file,"r") as f:
    reader = csv.reader(f,delimiter=",")
    self.xitireq = [row[0] for row in reader if "xiti" in row[0]]
with open(file,")
    self.apireq = [row[0] for row in reader if "https://www.blabal.de/api" in row[0]]

如果我这样写代码,self.apireq为空:

with open(file,")
    self.xitireq = [row[0] for row in reader if "xiti" in row[0]]
    self.apireq = [row[0] for row in reader if "https://www.blabal.de/api" in row[0]]
最佳答案
我能想到的最简单的解决方案就是这样

with open(file,"r") as f:
    reader = list(csv.reader(f,"))
    self.xitireq = [x for x in reader if "xiti" in x]
    self.apireq = [x for x in reader if "https://www.blabal.de/api" in x]

唯一的区别是,我根据发帖Python import csv to list和本文档https://docs.python.org/3/library/csv.html#csv.Dialect将您的阅读器转换为带有list()的列表.

此时将读取器重命名为某种名称可能更准确,但这仅是语义.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读