python——文件迭代操作,教你读取文件的多种方法
off999 2024-10-23 12:45 28 浏览 0 评论
喜欢编程,热爱分享,希望能结交更多志同道合的朋友,一起在学习Python的道路上走得更远!有不懂的问题可以私聊我哦!
要读取一个文件有很多种方式:按字节数读取、按行读取、按段落读取、一次性全部读取等等。如果不是深入的操作文件数据,按行读、写是最通用的方式。
以下是下面测试时使用的文件a.txt的内容:
1 first line 2 second line 3 third line
在Python中,readline()函数可以一次读取一行,且每次都是前进式的读取一行,读到文件结尾的时候会返回空字符串。
1 >>> f = open('a.txt')
2 >>> f.readline()
3 'first line\n'
4 >>> f.readline()
5 'second line\n'
6 >>> f.readline()
7 'third line\n'
8 >>> f.readline()
9 ''
readline()的操作就像是有一个指针,每次读完一行就将指针指向那一行的后面做下标记,以便下次能从这里开始继续向后读取一行。
除了readline(),open()打开的文件对象还有另一种方式__next__()可以一次向前读取一行,只不过__next__()在读取到文件结尾的时候不是返回空字符串,而是直接抛出迭代异常:
1 >>> f = open("a.txt")
2 >>> f.__next__()
3 'first line\n'
4 >>> f.__next__()
5 'second line\n'
6 >>> f.__next__()
7 'third line\n'
8 >>> f.__next__()
9 Traceback (most recent call last):
10 File "<stdin>", line 1, in <module>
11 StopIteration
内置函数next()会自动调用__next__(),也能进行迭代:
1 >>> f = open("a.txt")
2 >>> next(f)
3 'first line\n'
4 >>> next(f)
5 'second line\n'
6 >>> next(f)
7 'third line\n'
8 >>> next(f)
9 Traceback (most recent call last):
10 File "<stdin>", line 1, in <module>
11 StopIteration
要想再次读取这个文件,只能先重置这个指针,比如重新打开这个文件可以重置指针。
open()打开的文件是一个可迭代对象,它有__next__(),它可以被for/in等迭代工具来操作,例如:
1 >>> 'first line\n' in open('a.txt')
2 True
所以更好的按行读取文件的方式是for line in open('file'),不用刻意使用readline()等函数去读取。
1 >>> for line in open('a.txt'):
2 ... print(line,end='')
3 ...
4 first line
5 second line
6 third line
上面的print()设置了end='',因为读取每一行时会将换行符也读入,而print默认是自带换行符的,所以这里要禁止print的终止符,否则每一行后将多一空行。
上面使用for line in open('a.txt')的方式是最好的,它每次只读一行到内存,在需要读下一行的时候再去文件中读取,直到读完整个文件也都只占用了一行数据的内存空间。
也可以使用while去读取文件,并:
1 >>> f=open('a.txt')
2 >>> while True:
3 ... line = f.readline()
4 ... if not line: break
5 ... print(line,end='')
6 ...
7 first line
8 second line
9 third line
在Python中,使用for一般比while速度更快,它是C写的,而while是Python虚拟机的解释代码。而且,for一般比while要更简单,而往往Python中的简单就意味着高效。
此外,还可以使用readlines()函数(和readline()不同,这是复数形式),它表示一次性读取所有内容到一个列表中,每一行都是这个大列表的一个元素。
1 >>> lines = open('a.txt').readlines()
2 >>> lines
3 ['first line\n', 'second line\n', 'third line\n']
因为存放到列表中了,所以也可以迭代readlines()读取的内容:
1 >>> for line in open('a.txt').readlines():
2 ... print(line,end='')
3 ...
4 first line
5 second line
6 third line
这种一次性全部读取的方式在大多数情况下并非良方,如果是一个大文件,它会占用大量内存,甚至可能会因为内存不足而读取失败。
但并非必须要选择for line in open('a.txt')的方式,因为有些时候必须加载整个文件才能进行后续的操作,比如要排序文件,必须要拥有文件的所有数据才能进行排序。而且对于小文件来说,一次性读取到一个列表中操作起来可能会更加方便,因为列表对象有很多好用的方法。所以,不能一概而论地选择for line in open('a.txt')。
觉得文章还不错的话不妨收藏起来慢慢看,有任何建议或看法欢迎大家在评论区分享讨论!
我是一名python开发工程师,整理了一套python的学习资料,如果你想提升自己,对编程感兴趣,关注我并在后台私信小编:“08”即可免费领取资料!希望对你能有所帮助!
相关推荐
- 电脑桌面此电脑没了怎么恢复
-
1.在桌面上单击鼠标右键。将光标移到查看选项上。2.此时在右边找到显示桌面图标选项。此时在右边找到显示桌面图标选项。3.此时即可发现桌面的图标回来了。电脑桌面什么都没有了,可以建议找到设置,尝试恢复电...
- 台式电脑怎么重置系统(台式电脑怎么重新设置)
-
1、Win10系统启动到LOGO界面后,强制重启,反复3次左右,至到显示疑难解答,我们点击疑难解答进入;2.选重置此点电脑;3.接下来这里,我选择的删除所有内容。这里是准备要格式化系统分区C盘,如果想...
- 电脑公司模拟器破解版下载(电脑公司模拟器1.0.8)
-
直接先将xci程序复制到switch存储卡根目录,而后通过主机自带的安装程序直接安装
- xp系统永久激活密钥2020年(xp系统激活秘钥)
-
windowsxp产品密钥大全YBVJB-YV2JW-7FHPT-6D8XG-RT83GHRXTR-FKTCV-X8QCH-D7PTH-KYYPBJF8MD-XB4Y4-HHB28-Q3G2K-QW...
- 手写中文输入法下载安装(中文手写输入器)
-
1、首先第一步就是打开手机主界面,然后依次打开“设置”、“通用”、“键盘”,2、跳转的页面再点击“键盘”,3、勾选自己喜欢的中文手写模式,最后点击设定即可。仅参考先打开手机设置,然后点击一个语言和输入...
- office2007的产品密钥(office 产品密钥)
-
下载一个kms软件关闭杀毒软件大概三十秒就会完成相应的注册然后就可以正常的使用了
- 十大杀毒app排行(知名杀毒软件)
-
360安全卫士今天就为您推荐杀毒软件排行榜第一的免费软件——360安全卫士,首创即扫即清功能,操作流程更简单,而且在用户使用过程当中还能有效拦截病毒的侵入,提供强力守护。状元:BitDefender ...
- 笔记本怎么关闭防火墙(笔记本怎么关掉防火墙)
-
Win10教育版关闭防火墙设置方法 步骤1、在Win10桌面这台电脑图标上右键,然后选择“属性”。 步骤2、进入这台电脑属性之后,再点击左上角的“控制面板主页”。 步骤3、进入Win10控制面板...
- 32g内存还需要虚拟内存吗(32g内存还需要虚拟内存吗 知乎)
-
还需要的。虚拟内存是一定要的。就算你32G内存也是需要一个虚拟的转换空间。这个可以自己手动设置7000M左右就可以了,不用设置太大,没有用。虚拟内存是一定要的。就算你32G内存也是需要一个虚拟的...
- windows补丁怎么更新(windows 补丁更新)
-
windowsserver系统补丁升级的方法,1.打开WindowsServer系统运行对话框;2.在对话框中输入“control”;3.系统控制面板窗口自动打开;4.点击“Systemand...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
