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动态加载变量示例分享
Feb 17 Python
python清除字符串里非数字字符的方法
Jul 02 Python
编写Python脚本抓取网络小说来制作自己的阅读器
Aug 20 Python
Python画图学习入门教程
Jul 01 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
Jun 14 Python
解决使用PyCharm时无法启动控制台的问题
Jan 19 Python
python实现高斯判别分析算法的例子
Dec 09 Python
python3操作注册表的方法(Url protocol)
Feb 05 Python
python 计算概率密度、累计分布、逆函数的例子
Feb 25 Python
Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解
Mar 30 Python
完美解决Pycharm中matplotlib画图中文乱码问题
Jan 11 Python
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
Apr 12 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 版本]
2007/03/20 PHP
PHP设计模式之装饰者模式
2012/02/29 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
2013/04/10 Javascript
jquery使用ul模拟select实现表单美化的方法
2015/08/18 Javascript
超赞的jQuery图片滑块动画特效代码汇总
2016/01/25 Javascript
关于jquery中动态增加select,事件无效的快速解决方法
2016/08/29 Javascript
使用jQuery卸载全部事件的思路详解
2017/04/03 jQuery
详解Node.js access_token的获取、存储及更新
2017/06/20 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
2018/03/09 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
了解javascript中的Dom操作
2019/05/27 Javascript
jquery中为什么能用$操作
2019/06/18 jQuery
vue解决使用$http获取数据时报错的问题
2019/10/30 Javascript
python和shell变量互相传递的几种方法
2013/11/20 Python
pygame学习笔记(6):完成一个简单的游戏
2015/04/15 Python
Python内建数据结构详解
2016/02/03 Python
windows系统下Python环境搭建教程
2017/03/28 Python
Python实现对象转换为xml的方法示例
2017/06/08 Python
python flask实现分页的示例代码
2018/08/02 Python
Django csrf 验证问题的实现
2018/10/09 Python
PyGame贪吃蛇的实现代码示例
2018/11/21 Python
python中sympy库求常微分方程的用法
2020/04/28 Python
HTML5添加鼠标悬浮音响效果不使用FLASH
2014/04/23 HTML / CSS
HTML5利用约束验证API来检查表单的输入数据的代码实例
2016/12/20 HTML / CSS
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
家得宝加拿大家装网上商店:The Home Depot加拿大
2016/08/27 全球购物
澳大利亚领先的在线礼品网站:Gifts Australia
2020/08/15 全球购物
工作会议欢迎词
2014/01/16 职场文书
圣诞节红领巾广播稿
2014/02/03 职场文书
大学军训感言200字
2014/02/26 职场文书
小学六一主持词开场白
2015/05/28 职场文书
日本官方排名前10的动漫,名侦探柯南上榜,第一是一部创造历史的动漫
2022/03/18 日漫
详解Alibaba Java诊断工具Arthas查看Dubbo动态代理类
2022/04/08 Java/Android