📅  最后修改于: 2023-12-03 15:34:32.802000             🧑  作者: Mango
在 Python 中,如果需要修改文本文件中的内容,通常需要先读取整个文件,修改内容后再写回文件。但这种操作有时会占用大量的内存。为了解决这个问题,我们可以使用 Python 标准库中的 fileinput
模块,直接在原始文件上进行就地编辑。
fileinput
模块使用类似 Unix 命令行中的管道机制。我们可以将多个文件通过管道传递给一个处理程序,从而达到同时处理多个文件的目的。使用 fileinput
时,我们可以将多个文件名或者通配符作为参数传递给 fileinput.input()
方法,然后用 for
循环依次读取每一行内容进行处理。
在每一次循环中,fileinput
都会自动选择一个可读的文件或者标准输入作为输入源。我们可以通过 fileinput.filename()
方法获得当前读取的文件名,通过 fileinput.filelineno()
方法获得当前读取的行号。如果需要将处理结果输出到原始文件,可以通过 print()
函数将内容输出到标准输出流,fileinput
会将标准输出流的内容写回原始文件中。
下面的代码演示了如何使用 fileinput
模块实现对一个文本文件的就地编辑。它将文本文件中的 Hello
替换为 World
。
import fileinput
for line in fileinput.input('example.txt', inplace=True):
print(line.replace('Hello', 'World'), end='')
在上面的代码中,fileinput.input()
方法的第一个参数是文件名或者通配符,也可以是包含文件名的列表。第二个参数 inplace
表示是否将处理结果直接写回原始文件中,如果设为 True
,则需要加上 end=''
参数避免多余的空行。最后,将处理结果输出到标准输出流即可。
使用 fileinput
模块可以快速实现对文本文件的就地编辑,对于大型文本文件尤为有用。但需要注意的是,fileinput
使用了系统默认编码,如果需要指定编码,可以通过 open()
函数传递 encoding
参数进行设置。