📜  Python:使用 FileInput 就地编辑(1)

📅  最后修改于: 2023-12-03 15:34:32.802000             🧑  作者: Mango

Python:使用 FileInput 就地编辑

在 Python 中,如果需要修改文本文件中的内容,通常需要先读取整个文件,修改内容后再写回文件。但这种操作有时会占用大量的内存。为了解决这个问题,我们可以使用 Python 标准库中的 fileinput 模块,直接在原始文件上进行就地编辑。

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 参数进行设置。