这是我参与8月更文挑战的第5天,活动详情查看: 8月更文挑战
回顾复习
我们前面在文件读写操作学会了使用 open() 和 read()( readline()、readlines())组合,来读取单个文件中的数据。
但在需要读取多个文件的数据,这种情况下,再使用这个组合,显然就不合适了
关于读写文件操作可以分为单文件和多文件操作如下:
因此,我们本次来学习,fileinput模块对多文件进行读取进行操作
1. fileinput模式概述
Python提供fileinput模块对一个或者多个文件中的内容进行迭代、遍历、格式化输出、查找替换操作功能
- 打开文件:fileinput模块提供input函数支持打开单个或多个文件;当传入多个文件参数方式files=('file1','file2')
- 读取文件:可以通过for循环进行读取
- 打开读取文件方式:默认以文本模式进行操作
- 读取多个文件时遇到空文件时:则打开后将立即关闭
- 可以控制打开文件的方式两种方法:fileinput.input()和FileInput()
- 可以与上下文管理器with进行组合使用
注意:
- 如果fileinput模块操作文件时方式I/O错误,系统将会抛出OSError(Python 3.3版本更名)
- 同样我们在使用fileinput模块对文件操作完后,也要关闭文件(fileinput.close()),否则会一直占用系统资源消耗CPU,长时间下去会发生OOM内存溢出等异常问题
推荐方法:
fileinput模块读取文件内容,使用for循环来进行读取,格式如下:
import fileinput
for line in fileinput.input():
process(line)
根据,前面学习的readlines(),对比fileinpput.input()有啥异同点:
- 相同点:fileinput.input()工作方式与readlines类似
- 区别点:fileinput.input()是创建一个xreadlines对象存储每一行数据 readlines()则是将内容全部读取放到列表中
2. fileinput模块方法
fileinput模块提供来可以支持读取多文件操作,常见方法如下:
| 方法 | 作用 |
|---|---|
| fileinput.input(file) | 返回能够用于for循环遍历的对象(每行数据) |
| fileinput.filename() | 返回当前文件的名称 |
| fileinput.lineno() | 返回当前已经读取的行的数量(序号) |
| fileinput.filelineno() | 返回当前读取的行的行号 |
| fileinput.isfirstline() | 检查当前行是否文件的第一行 |
| fileinput.isstdin() | 判断最后一行是否从stdin中读取 |
| fileinput.close() | 关闭队列 |
import fileinput
def fileread(file):
for line in fileinput.input(file):
print (fileinput.filename(),'>>','Line Number:',fileinput.lineno(),'>>',line)
#调用读取两个文件内容
fileread(("test.txt","test1.txt"))
3. 读取文件方法汇总
汇总一下,Python有7个方法,如下:
✶✶管道输入(了解):
Python中提供了sys.stdin类文件对象来读取键盘对象输入。但是在某些时候希望读取的不是来自用户的,而是来自某个命令,此时就需要管道输入。 管道输入作用在于,将前一个命令的输出,当成下一个命令的输入。支持多平台
✶随机读取指定行:
linecache模块允许Python源文件中随机读取指定行,并在内部使用缓冲优化存储。由于该模块主要设计成读取Python源文件,因此它会用UTF-8字符集来读取文本文件。
import linecache
import random
print(linecache.getline(random.__file__,3))
print(linecache.getline('linecache.py',3))
print(linecache.getline('test.txt',2))
✍总结
本期,我们又学习关于文件操作的模块fileinput,当我们需要对多个文件进行打开读取时,我们就可以使用fileinput.input()方法与for循环结合来实现,大家在日常使用时,按需要进行使用
以上是本期内容,欢迎大佬们点赞评论指正,下次见~💋💋