python csv模块的reader是一个迭代器,无法多次迭代
2024-10-12 01:34:15
在一个项目中,我需要多次遍历一个文本,该文本我是用csv.reader读取的。但后来发现,本文只对第一次循环有用,而之后的循环均为空白。经过排错后,我确定问题就出现在csv.reader()这一步。之后我不调用csv.reader读取文本,直接用readlines(),问题解决。之后查阅CSV模块的说明,发现reader其实是一个迭代器。以前并没有细究可迭代对象与迭代器之间的具体区别,因为以前的使用基本都是遍历文本一次。网上查资料发现:迭代器对象不支持重新迭代,也就是同一个迭代器对象无法多次迭代。
In [19]: a = ListIter([1,2,3,4,5]) In [20]: [i for i in a]
Out[20]: [1, 2, 3, 4, 5] In [21]: [i for i in a]
Out[21]: [] In [22]:
可见,再次迭代迭代器a的时候便只返回了空列表,这是因为for循环直接捕获了StopIteration
异常。如果要再次迭代生成列表的话只能重新生成一个新的迭代器对象。
具体参见:http://python.jobbole.com/85240/
有些问题只有自己项目中经历了,折腾了,才会理解的更深刻。记录笔记,防止下次再掉进这个坑。
最新文章
- 用scikit-learn学习BIRCH聚类
- 栈的理解以及如何计算程序所需栈的大小并在IAR中设置栈
- 规则引擎集成接口(八)Java接口实例
- EI目录下载地址及保护密码
- KnockoutJS 3.X API 第一章 简介
- Swift3.0语言教程使用路径字符串
- JQuery-UI Dialog下使用服务器端按钮失效
- Gridview全选
- jquery ajax请求了两次问题
- angular+rails集成实战
- 玩转Firefox侧栏
- CSS背景图拉伸自适应尺寸
- Mysql创建和删除数据库
- 8.Flask-Script
- 浅谈JS的数组遍历方法
- python之count()函数
- java 常用命令
- mac安装ocr
- Highmaps网页图表教程之下载Highmaps与Highmaps的地图类型
- Search in Rotated Sorted Array II leetcode java
热门文章
- DIN(Deep Interest Network of CTR) [Paper笔记]
- windows添加默认路由
- 【微信小程序开发】快速开发一个动态横向导航模板并使用
- kafka消息传输时的对象转字符串时所需 -json String 转list 、set、 Long、 String 、map 与json Iterator遍历
- hdu 5225 Tom and permutation(回溯)
- 基于Handler架构的录音程序
- spool命令、创建一个表,创建而且copy表,查看别的用户下的表,rowid行地址 索引的时候使用,表的增删改查,删除表,oracle的回收站
- Git(二)Git几个区的关系与Git和GitHub的关联
- freemarker常见语法大全
- MPSOC之7——开发流程uramdisk