Python fileinput模块使用详解:高效处理多文件与原地修改
本文详解Python中fileinput模块的使用方法。该模块通过input()函数生成迭代器,高效处理单个或多个文件的读取,避免大文件内存溢出。文章演示了如何获取行号、文件名,以及如何利用inplace参数实现文件内容的原地修改与备份,适用于日志处理、批量文本替换等场景。
Python fileinput模块使用详解:高效处理多文件与原地修改
本文深入解析Python中fileinput模块的具体用法,通过详细的代码示例展示其在文件迭代、遍历及内容修改方面的应用,为开发者在处理文件读写任务时提供实用的参考方案。
模块概述与核心优势
一、模块概述
fileinput模块专为对多个文件内容进行迭代和遍历操作而设计。相比Python内置的open函数仅能处理单个文件的读写,fileinput提供了更强大的多文件处理能力。
fileinput模块中的input()函数在效率和使用便捷性上优于open函数,主要体现在以下几个方面:
首先,input()函数返回一个迭代器对象,这种机制确保在处理大文件时不会占用过多内存,避免内存溢出问题。其次,使用该模块对文件进行循环遍历、格式化输出、查找替换等操作时,还能直接获取每一行的行号,功能十分便捷。
input函数使用格式
二、fileinput读取文件函数input的使用格式
fileinput.input (files='filename', inplace=False, backup='', bufsize=0, mode='r', openhook=None)
files: # 文件的路径列表,默认是stdin方式,多文件['1.txt','2.txt',...]
inplace: # 是否将标准输出的结果写回文件,默认不取代
backup: # 备份文件的扩展名,只指定扩展名,如.bak。如果该文件的备份文件已存在,则会自动覆盖。
bufsize: # 缓冲区大小,默认为0,如果文件很大,可以修改此参数,一般默认即可
mode: # 读写模式,默认为只读
openhook: # 该钩子用于控制打开的所有文件,比如说编码方式等;
常用函数解析
三、fileinput中的常用函数
| 函数 | 描述 |
| input([files[, inplace[, backup]]]) | 帮助迭代多个输入流中的行 |
| filename() | 返回当前文件的名称 |
| lineno() | 返回(累计的)当前行号 |
| filelineno() | 返回在当前文件中的行号 |
| isfirstline() | 检查当前行是否是文件中的第一行 |
| isstdin() | 检查最后一行是否来自sys.stdin |
| nextfile() | 关闭当前文件并移到下一个文件 |
| close() | 关闭序列 |
fileinput.input是核心函数,它返回一个迭代器对象。若需处理多个文件,可向该函数传入一个或多个文件名作为参数。
此外,可将参数inplace设置为True(即inplace=True)。在此模式下,对访问的每一行进行打印输出的内容,将被自动写回到当前输入文件中。此时,可选参数backup用于指定从原始文件创建的备份文件的扩展名。
代码示例与实战应用
四、代码示例
1、读取多个文件
# a.txt文件的内容
"""
我
是
好
人
"""
# b.txt文件的内容
"""
他
是
坏
人
"""
# 读取一个文件
for line in fileinput.input("a.txt"):
print(line)
# 读取多个文件
for line in fileinput.input(["a.txt", "b.txt"]):
print(line)
2、修改文件并备份原文件
# -*_ coding:utf-8 -*-
import fileinput
for line in fileinput.input("a.txt", backup=".bak", inplace=True):
line = line.replace("我", "小明")
print(line)
# 结果
当前文件夹会生成a.txt.bak文件,内容是之前的内容,
而a.txt文件已经被修改了,把"我"变成了"小明"
3、输出当前行号和行内容
# -*_ coding:utf-8 -*-
import fileinput
for line in fileinput.input("a.txt"):
lineno = fileinput.filelineno()
print lineno, line
# 结果
1 我
2 是
3 好、
4 人
4、输出文件名
# -*_ coding:utf-8 -*-
import fileinput
for line in fileinput.input("a.txt"):
# 在第一行前面先输出文件名
if fileinput.isfirstline():
print fileinput.filename()
print line
# 结果
a.txt
我
是
好、
人
其他相关函数的使用方法类似,此处不再逐一赘述。
以上就是本文的全部内容,希望能为各位的学习和工作提供帮助,欢迎大家继续关注本站获取更多技术资讯。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













