Python fileinput模块如何逐行读取多个文件


Posted in Python onOctober 05, 2020

Python 提供了 fileinput 模块,通过该模块中的 input() 函数,我们能同时打开指定的多个文件,还可以逐个读取这些文件中的内容。

fileinput 模块中 input() 该函数的语法格式如下:

fileinput.input(files="filename1, filename2, ...", inplace=False, backup='', bufsize=0, mode='r', openhook=None)

此函数会返回一个 FileInput 对象,它可以理解为是将多个指定文件合并之后的文件对象。其中,各个参数的含义如下:

  • files:多个文件的路径列表;
  • inplace:用于指定是否将标准输出的结果写回到文件,此参数默认值为 False;
  • backup:用于指定备份文件的扩展名;
  • bufsize:指定缓冲区的大小,默认为 0;
  • mode:打开文件的格式,默认为 r(只读格式);
  • openhook:控制文件的打开方式,例如编码格式等。

注意,和 open() 函数不同,input() 函数不能指定打开文件的编码格式,这意味着使用该函数读取的所有文件,除非以二进制方式进行读取,否则该文件编码格式都必须和当前操作系统默认的编码格式相同,不然 Python 解释器可能会提示 UnicodeDecodeError 错误。

和 open() 函数返回单个的文件对象不同,fileinput 对象无需调用类似 read()、readline()、readlines() 这样的函数,直接通过 for 循环即可按次序读取多个文件中的数据。

值得一提的是,fileinput 模块还提供了很多使用的函数(如表 1 所示),通过调用这些函数,可以帮我们更快地实现想要的功能。

表 fileinput 模块常用函数

函数名 功能描述
fileinput.filename() 返回当前正在读取的文件名称。
fileinput.fileno() 返回当前正在读取文件的文件描述符。
fileinput.lineno() 返回当前读取了多少行。
fileinput.filelineno() 返回当前正在读取的内容位于当前文件中的行号。
fileinput.isfirstline() 判断当前读取的内容在当前文件中是否位于第 1 行。
fileinput.nextfile() 关闭当前正在读取的文件,并开始读取下一个文件。
fileinput.close() 关闭 FileInput 对象。

文件描述符是一个文件的代号,其值为一个整数。后续章节将会介绍关于文件描述符的操作。

讲了这么多,接下来举个例子。假设使用 input() 读取 2 个文件,分别为 my_file.txt 和 file.txt,它们位于同一目录,且各自包含的内容如下所示:

#file.txt
Python教程
http://c.biancheng.net/python/

#my_file.txt
Linux教程
http://c.biancheng.net/linux_tutorial/

下面程序演示了如何使用 input() 函数依次读取这 2 个文件:

import fileinput
#使用for循环遍历 fileinput 对象
for line in fileinput.input(files=('my_file.txt', 'file.txt')):
# 输出读取到的内容
print(line)
# 关闭文件流
fileinput.close()

在使用 fileinput 模块中的 input() 函数之前,一定要先引入 fileinput 模块。

程序执行结果为:

Linux教程

http://c.biancheng.net/linux_tutorial/
Python教程

http://c.biancheng.net/python/

显然,读取文件内容的次序,取决于 input() 函数中文件名的先后次序。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
Jun 18 Python
Python实现3行代码解简单的一元一次方程
Aug 18 Python
Centos5.x下升级python到python2.7版本教程
Feb 14 Python
python删除列表内容
Aug 04 Python
Python单元测试实例详解
May 25 Python
Python 判断文件或目录是否存在的实例代码
Jul 19 Python
python3.5安装python3-tk详解
Apr 26 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
Jun 26 Python
Django框架之中间件MiddleWare的实现
Dec 30 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
May 26 Python
Python基于staticmethod装饰器标示静态方法
Oct 17 Python
python 通过使用Yolact训练数据集
Apr 06 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
Oct 04 #Python
Python中random模块常用方法的使用教程
Oct 04 #Python
python代数式括号有效性检验示例代码
Oct 04 #Python
关于Python字符编码与二进制不得不说的一些事
Oct 04 #Python
Python实现EM算法实例代码
Oct 04 #Python
python em算法的实现
Oct 03 #Python
浅析Python中字符串的intern机制
Oct 03 #Python
You might like
实现PHP+Mysql无限分类的方法汇总
2015/03/02 PHP
使用php完成常见的文件上传功能(推荐)
2017/01/13 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
实例讲解PHP验证邮箱是否合格
2019/01/28 PHP
javascript读取RSS数据
2007/01/20 Javascript
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
js获取RadioButtonList的Value/Text及选中值等信息实现代码
2013/03/05 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
[原创]推荐10款最热门jQuery UI框架
2014/08/19 Javascript
javascript实现行拖动的方法
2015/05/27 Javascript
详谈js遍历集合(Array,Map,Set)
2017/04/06 Javascript
vue父组件中获取子组件中的数据(实例讲解)
2017/09/27 Javascript
js中事件对象和事件委托的介绍
2019/01/21 Javascript
详解Element 指令clickoutside源码分析
2019/02/15 Javascript
全面了解JavaScript的作用域链
2019/04/03 Javascript
对layer弹出框中icon数字参数的说明介绍
2019/09/04 Javascript
vue使用swiper实现中间大两边小的轮播图效果
2019/11/24 Javascript
手把手带你入门微信小程序新框架Kbone的使用
2020/02/25 Javascript
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
Python随机函数random()使用方法小结
2018/04/29 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
python使用多线程编写tcp客户端程序
2019/09/02 Python
Python数据库封装实现代码示例解析
2020/09/05 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
CSS3实现翘边的阴影效果的代码示例
2016/06/13 HTML / CSS
HTML5 video视频字幕的使用和制作方法
2018/05/03 HTML / CSS
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
环保专业大学生职业规划设计
2014/01/10 职场文书
班级聚会策划书
2014/01/16 职场文书
2014年情人节活动方案
2014/02/16 职场文书
大学信息公开实施方案
2014/03/09 职场文书
党员年度个人总结
2015/02/14 职场文书
七年级之家长会发言稿范文
2019/09/04 职场文书
Mysql数据库按时间点恢复实战记录
2021/06/30 MySQL
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技
mysql 排序失效
2022/05/20 MySQL