当前位置: 首页 > news >正文

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

前面章节中,我们学会了使用 open() 和 read()(或者 readline()、readlines() )组合,来读取单个文件中的数据。但在某些场景中,可能需要读取多个文件的数据,这种情况下,再使用这个组合,显然就不合适了。

庆幸的是,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 所示),通过调用这些函数,可以帮我们更快地实现想要的功能。

表 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://csdn.net/python/

#my_file.txt
Linux教程
http://csdn.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://csdn.net/linux_tutorial/
Python教程

http://csdn.net/python/

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

http://www.lryc.cn/news/10035.html

相关文章:

  • Vue3路由传参
  • 用户管理——认证功能JWT和Session
  • hashlib — 加密哈希算法
  • 四喜临门选股预警源码指标
  • Kotlin新手教程五(扩展)
  • QT入门Containers之Widget、Frame
  • 数据结构与算法基础-学习-12-线性表之顺序队
  • Python 字典(Dictionary)小窍门
  • 知识图谱构建技术综述
  • 环境变量和进程地址空间
  • 【数据结构】栈和队列
  • sql复习(视图、Top-N分析、其他数据库对象)
  • 2023年私募股权基金研究报告
  • Redis单点故障+红锁原理
  • 数据库中的存储过程
  • 基于 VPX 总线的工件台运动控制系统研究与开发-DSP+FPGA硬件架构(一)
  • Android 9.0 根据包名授予app所需的权限
  • 如何将Python包发布到PyPI上,使用pip安装自己的库
  • 【Git】git常用命令总结
  • Cortex-M0中断控制和系统控制
  • 科技云报道:2023,云计算的风向变了
  • 工程管理系统源码-专注项目数字化管理-工程管理
  • Nacos详细使用操作文档(图文详细)
  • 如何评价2023年美赛ABC题目
  • Win10显示dds及tga缩略图
  • Lesson5.1---Python 之 NumPy 简介和创建数组
  • Exchange 2013升级以及域名绑定等若干问题
  • linux安装jenkins
  • 【MySQL】MySQL表的增删改查(CRUD)
  • GCC for openEuler 数据库性能优化实践