博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对文件内容进行迭代
阅读量:6623 次
发布时间:2019-06-25

本文共 2117 字,大约阅读时间需要 7 分钟。

#前面了解了文件的基本操作方法。在实际应用中,对文件内容进行迭代和重复执行操作是比较常见的操作。
#所谓迭代,是指不断重复某一个动作,直到这些动作都完成为止。
 
1、按字节处理
#在while循环中,read方法是最常见的对文件内容进行迭代的方法,例如:
1 #!/usr/bin/python3 2 #-*-coding:UTF-8-*- 3 #file_while 4  5 path='./test.txt' 6 f_name=open(path,'w') 7 print('write length:',f_name.write('Hello')) 8 f_name=open(path) 9 c_str=f_name.read(1)10 while c_str:11     print('read str is:',c_str)12     c_str=f_name.read(1)13 f_name.close()
#执行结果如下:
1 D:\Python\workspace\datatime\20180116>python file_while.py2 write length: 53 read str is: H4 read str is: e5 read str is: l6 read str is: l7 read str is: o
#由执行结果看到,该示例对写入文件的每个字符都进行了循环了。这个程序运行到文件末尾时,read方法会返回一个空字符串,未执行到空字符串前,返回的都是非空字符串,表示布尔值为真。
#该示例中出现了代码的重复使用,可以使用while true/break语句结构进一步优化。优化代码如下:
1 #!/usr/bin/python3 2 #-*-coding:UTF-8-*- 3 #file_while 4  5 path='./test.txt' 6  7 f_name=open(path) 8 while True: 9     c_str=f_name.read(1)10     if not c_str:11         break12     print('read str is:',c_str)13 f_name.close()
#由代码结构看到,更改后的代码比之前更好。
2、按行操作
#在实际操作中,处理文件时可能需要对文件的行进行迭代,而不是单个字符。此时可以使用和处理字符一样的方式,只不过要使用readline方法,例如:
1 #!/usr/bin/python3 2 #-*-coding:UTF-8-*- 3 #迭代_readline 4  5 path='./test.txt' 6  7 f_name=open(path) 8 while True: 9     line=f_name.readline(1)10     if not line:11         break12     print('read line is:',line)13 f_name.close()
#使用该方式得到的是按行读取的字符。
 
3、使用fileinput实现懒加载式迭代
#我们前面了解了read方法和readline方法,这两个方法不带参数时将度组文件中所有内容,然后加载到内存中。当文件很大时,使用这个方式会占用太多内存,甚至直接使内存溢出(内存不够),从而导致执行失败。这种情况下,我们可以考虑使用while循环和readline方法代替这些方法。
#在Python中,for循环是优先考虑的选择,使用for循环意味着可以对任何进行分隔操作,而不是一步到位。
#按行读取时,若能使用for循环,则称之为懒加载式迭代,因为在操作过程中只读取实际需要的文件部分。使用fileinput需要导入fileinput模块,例如:
1 #!/usr/bin/python32 #-*-condig:UTF-8-*-3 #fileinput4 5 import fileinput6 for line in fileinput.input(path):7     print('line is',line)
#在该示例中没有看到文件的打开和关闭操作,是怎么处理文件的呢?其实这些操作被封装在input方法内部了。
 
4、文件迭代器
#从Python2.2版本开始,文件对象是可迭代的,这意味着可以直接在for循环中使用文件对象,从而进行迭代,例如:
1 #!/usr/bin/python3 2 #-*-coding:UTF-8-*- 3 #文件迭代器 4  5 path='./test.txt' 6  7 f_name=open(path) 8 for line in f_name: 9     print('line is:',line)10 f_name.close()
#该示例使用for循环对文件对象进行迭代,记住迭代结束后的文件要显式关闭。

转载于:https://www.cnblogs.com/DLHe/p/8370512.html

你可能感兴趣的文章
罗辑思维首席架构师:Go微服务改造实践
查看>>
打造具备互补测试技能的团队
查看>>
举重若轻的人人车移动端数据平台
查看>>
腾讯云与每日优鲜便利购战略签约 引领无人零售2.0时代发展
查看>>
微服务意味着分布式系统
查看>>
微服务网关Kong 1.0正式发布!提供100+项功能
查看>>
一地鸡毛 OR 绝地反击,2019年区块链发展指南
查看>>
Elasticsearch 7.0中引入的新集群协调子系统如何使用?
查看>>
F# 4.5提供Spans、Match!等特性
查看>>
Facebook产品经理的三年叙事与协作思考
查看>>
你的GitHub,怎么和我用的不太一样?
查看>>
区块链技术精华:四十种智能合约支持平台(三)
查看>>
终极指南:如何使用Visual Studio Code进行 Java 开发?
查看>>
微信小程序开发-个人总结
查看>>
就欧盟的通用数据保护法规(GDPR)影响采访Immuta
查看>>
Azure与Scott Guthrie:Azure安全中心和基于角色的访问控制
查看>>
javascript实现静态页面之间的传值
查看>>
如何用React + Rxjs实现一个虚拟滚动组件?
查看>>
go-elasticsearch: Elastic官方的Go语言客户端
查看>>
Java EE 8终于给出即将完成的迹象
查看>>