python——文件迭代操作,教你读取文件的多种方法
off999 2024-10-23 12:45 17 浏览 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”即可免费领取资料!希望对你能有所帮助!
相关推荐
- python入门到脱坑经典案例—清空列表
-
在Python中,清空列表是一个基础但重要的操作。clear()方法是最直接的方式,但还有其他方法也可以实现相同效果。以下是详细说明:1.使用clear()方法(Python3.3+推荐)...
- python中元组,列表,字典,集合删除项目方式的归纳
-
九三,君子终日乾乾,夕惕若,厉无咎。在使用python过程中会经常遇到这四种集合数据类型,今天就对这四种集合数据类型中删除项目的操作做个总结性的归纳。列表(List)是一种有序和可更改的集合。允许重复...
- Linux 下海量文件删除方法效率对比,最慢的竟然是 rm
-
Linux下海量文件删除方法效率对比,本次参赛选手一共6位,分别是:rm、find、findwithdelete、rsync、Python、Perl.首先建立50万个文件$testfor...
- 数据结构与算法——链式存储(链表)的插入及删除,
-
持续分享嵌入式技术,操作系统,算法,c语言/python等,欢迎小友关注支持上篇文章我们讲述了链表的基本概念及一些查找遍历的方法,本篇我们主要将一下链表的插入删除操作,以及采用堆栈方式如何创建链表。链...
- Python自动化:openpyxl写入数据,插入删除行列等基础操作
-
importopenpyxlwb=openpyxl.load_workbook("example1.xlsx")sh=wb['Sheet1']写入数据#...
- 在Linux下软件的安装与卸载(linux里的程序的安装与卸载命令)
-
通过apt安装/协助软件apt是AdvancedPackagingTool,是Linux下的一款安装包管理工具可以在终端中方便的安装/卸载/更新软件包命令使用格式:安装软件:sudoapt...
- Python 批量卸载关联包 pip-autoremove
-
pip工具在安装扩展包的时候会自动安装依赖的关联包,但是卸载时只删除单个包,无法卸载关联的包。pip-autoremove就是为了解决卸载关联包的问题。安装方法通过下面的命令安装:pipinsta...
- 用Python在Word文档中插入和删除文本框
-
在当今自动化办公需求日益增长的背景下,通过编程手段动态管理Word文档中的文本框元素已成为提升工作效率的关键技术路径。文本框作为文档排版中灵活的内容容器,既能承载多模态信息(如文字、图像),又可实现独...
- Python 从列表中删除值的多种实用方法详解
-
#Python从列表中删除值的多种实用方法详解在Python编程中,列表(List)是一种常用的数据结构,具有动态可变的特性。当我们需要从列表中删除元素时,根据不同的场景(如按值删除、按索引删除、...
- Python 中的前缀删除操作全指南(python删除前导0)
-
1.字符串前缀删除1.1使用内置方法Python提供了几种内置方法来处理字符串前缀的删除:#1.使用removeprefix()方法(Python3.9+)text="...
- 每天学点Python知识:如何删除空白
-
在Python中,删除空白可以分为几种不同的情况,常见的是针对字符串或列表中空白字符的处理。一、删除字符串中的空白1.删除字符串两端的空白(空格、\t、\n等)使用.strip()方法:s...
- Linux系统自带Python2&yum的卸载及重装
-
写在前面事情的起因是我昨天在测试Linux安装Python3的shell脚本时,需要卸载Python3重新安装一遍。但是通过如下命令卸载python3时,少写了个3,不小心将系统自带的python2也...
- 如何使用Python将多个excel文件数据快速汇总?
-
在数据分析和处理的过程中,Excel文件是我们经常会遇到的数据格式之一。本文将通过一个具体的示例,展示如何使用Python和Pandas库来读取、合并和处理多个Excel文件的数据,并最终生成一个包含...
- 【第三弹】用Python实现Excel的vlookup功能
-
今天继续用pandas实现Excel的vlookup功能,假设我们的2个表长成这样:我们希望把Sheet2的部门匹在Sheet1的最后一列。话不多说,先上代码:importpandasaspd...
- python中pandas读取excel单列及连续多列数据
-
案例:想获取test.xls中C列、H列以后(当H列后列数未知时)的所有数据。importpandasaspdfile_name=r'D:\test.xls'#表格绝对...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python自定义函数 (53)
- python进度条 (67)
- python吧 (67)
- python字典遍历 (54)
- python的for循环 (65)
- python格式化字符串 (61)
- python串口编程 (60)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python字典增加键值对 (53)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python人脸识别 (54)
- python多态 (60)
- python命令行参数 (53)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)