常用模块fileinput学习

简介

fileinput 模块提供了 input 函数,可以把多个输入流合并在一起,
类似于文件中的readlines方法,只不过前者是迭代器,后者是列表。
该函数的语法格式如下:

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

此函数会返回一个 FileInput 对象,其中,各个参数的含义如下:

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

当程序使用上面函数创建了 FileInput 对象之后,即可通过 for 循环来遍历文件的每一行。此外,fileinput 还提供了很多全局函数来判断正在读取的文件信息,如表 1 所示。

表 1 fileinput 模块常用函数
函数名功能描述
fileinput.filename()返回正在读取的文件的文件名。
fileinput.fileno()返回当前文件的文件描述符(file descriptor),该文件描述符是一个整数。
fileinput.lineno()返回当前读取的行号。
fileinput.filelineno()返回当前读取的行在其文件中的行号。
fileinput.isfirstline()返回当前读取的行在其文件中是否为第一行。
fileinput.isstdin()返回最后一行是否从 sys.stdin 读取。程序可以使用“-”代表从 sys.stdin 读取。
fileinput.nextfile()关闭当前文件,开始读取下一个文件。
fileinput.close()关闭 FileInput 对象。

文件描述符是一个文件的代号,其值为一个整数。

通过上面的介绍不难发现,fileinput 也存在一个缺陷,即在创建 FileInput 对象时不能指定字符集,因此它所读取的文件的字符集必须与操作系统默认的字符集保持一致。当然,如果文本文件的内容是纯英文,则不存在字符集的问题。

假设,目前有 file1.txt 和 file2.txt 文件,它们位于同一目录,并各自包含如下内容:

#file1.txt包含如下内容:

CSDN博客
https://www.csdn.net/

#file2.txt包含如下内容:

w3cschool
https://www.w3cschool.cn/

下面程序示范了使用 fileinput 模块来读取以上 2 个文件:

import fileinput

一次读取多个文件

for line in fileinput.input(files=('file1.txt', 'file2.txt')):
    # 输出文件名,当前行在当前文件中的行号
    print(fileinput.filename(), fileinput.filelineno(), line)

关闭文件流

fileinput.close()

上面程序使用 fileinput.input 直接合并了 file1.txt 和 file2.txt 两个文件,这样程序可以直接遍历读取这两个文件的内容。程序运行结果如下:

file1.txt 1 CSDN博客
file1.txt 2 https://www.csdn.net/
file2.txt 1 w3cschool
file2.txt 2 https://www.w3cschool.cn/
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值