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 相关文章推荐
Python中使用HTMLParser解析html实例
Feb 08 Python
举例讲解Python编程中对线程锁的使用
Jul 12 Python
Python协程的用法和例子详解
Sep 09 Python
python分布式环境下的限流器的示例
Oct 26 Python
完美解决Pycharm无法导入包的问题 Unresolved reference
May 18 Python
在python环境下运用kafka对数据进行实时传输的方法
Dec 27 Python
Python Pandas中根据列的值选取多行数据
Jul 08 Python
在Pytorch中计算自己模型的FLOPs方式
Dec 30 Python
关于tf.reverse_sequence()简述
Jan 20 Python
django ORM之values和annotate使用详解
May 19 Python
Python字符串三种格式化输出
Sep 17 Python
python中类与对象之间的关系详解
Dec 16 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中的cookie
2006/11/26 PHP
PHP程序级守护进程的实现与优化的使用概述
2013/05/02 PHP
php简单统计中文个数的方法
2016/09/30 PHP
php的socket编程详解
2016/11/20 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
2017/08/02 PHP
php让json_encode不自动转义斜杠“/”的方法
2020/04/27 PHP
jQuery与ExtJS之选择实例分析
2010/08/19 Javascript
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
那些年,我还在学习jquery 学习笔记
2012/03/05 Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
2013/04/26 Javascript
javascript利用apply和arguments复用方法
2013/11/25 Javascript
JavaScript实现按Ctrl键打开新页面
2014/09/04 Javascript
原生JavaScript生成GUID的实现示例
2014/09/05 Javascript
javascript获取文档坐标和视口坐标
2015/05/26 Javascript
jQuery动态背景图片效果实现方法
2015/07/03 Javascript
高性能JavaScript 重排与重绘(2)
2015/08/11 Javascript
jquery原理以及学习技巧介绍
2015/11/11 Javascript
Javascript 引擎工作机制详解
2016/11/30 Javascript
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
js学习总结之dom2级事件基础知识详解
2017/07/27 Javascript
微信jssdk逻辑在vue中的运用详解
2018/11/14 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
2020/07/22 Javascript
[49:20]2014 DOTA2国际邀请赛中国区预选赛5.21 CIS VS TongFu
2014/05/22 DOTA
[01:15:12]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#4Newbee VS CDEC
2016/03/03 DOTA
Python WSGI的深入理解
2018/08/01 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
对python中assert、isinstance的用法详解
2019/11/27 Python
Python 忽略文件名编码的方法
2020/08/01 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
2014年大学庆元旦迎新年活动方案
2014/03/09 职场文书
汇源肾宝广告词
2014/03/20 职场文书
党风廉政建设责任书
2014/04/14 职场文书
小学生国庆65周年演讲稿范文(2篇)
2014/09/21 职场文书
爸爸的三轮车观后感
2015/06/16 职场文书
WebRTC记录音视频流(web技术分享)
2022/02/24 Javascript