Python 标准库 fileinput 与文件迭代器
Python 的 fileinput 模块提供了一种简单的方式来读取来自多个文件或输入流的任意数量的行。该模块维护在文件列表中的当前文件,并在文件之间进行切换。和 Python 的流一样,它的工作方式是将每个文件作为一个序列来处理。
1. fileinput 模块的基本用法
fileinput 模块的主要方法是 fileinput.input(files=None, inplace=False, backup='', openhook=None)
。
files
可以是包含文件名的列表或者直接使用字符串代表文件路径,如果省略参数files
,则默认从标准输入stdin
读取,一读到文件结束符EOF
迭代截止。inplace
参数可以设置为 True,表示直接修改文件内容,而不是将输出打印到屏幕上。backup
参数可以设置备份文件的扩展名(比如 ".bak"),即在修改文件时将原文件备份为原文件名加上备份的扩展名后的文件。省略时,不进行备份操作。
import fileinput
# 遍历单个文件
with open('test.txt', 'r') as f:
for line in fileinput.input(f):
print(line.strip())
# 遍历多个文件
for line in fileinput.input(['file1.txt', 'file2.txt']):
print(line.strip())
2. fileinput 模块的高阶用法
fileinput.filename()
:返回当前正在处理的文件的名称(不包括路径),如果当前在处理标准输入,则返回-
。fileinput.lineno()
:返回当前正在处理的行数(基于1),如果当前在处理标准输入,则返回0。fileinput.filelineno()
:返回当前正在处理的文件中的行号(基于1),如果当前在处理标准输入,则返回0。
import fileinput
# 遍历单个文件,输出每行的行号和内容
with open('test.txt', 'r') as f:
for line in fileinput.input(f):
print(f"{fileinput.lineno()}: {line.strip()}")
# 遍历多个文件,同时修改文件内容
with fileinput.FileInput(files=['file1.txt', 'file2.txt'], inplace=True, backup='.bak') as f:
for line in f:
print(line.replace('apple', 'orange'), end='')
在上面的示例中, inplace
参数设置为 True,表示在遍历多个文件时,将 'file1.txt' 和 'file2.txt' 中的所有字符串 'apple' 替换为 'orange',并在原文件中修改;同时备份原文件为 '.bak'。
通过以上两个示例,相信读者可以初步了解 fileinput 模块的用法,想要了解更多详情,请查阅 Python 官方文档。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 标准库 fileinput与文件迭代器 - Python技术站