gpt4 book ai didi

python - 在 Python 中搜索和替换文件中的一行

转载 作者:IT老高 更新时间:2023-10-28 12:10:28 24 4
gpt4 key购买 nike

我想遍历文本文件的内容并在某些行上进行搜索和替换,然后将结果写回文件。我可以先将整个文件加载到内存中,然后再将其写回,但这可能不是最好的方法。

在以下代码中最好的方法是什么?

f = open(file)
for line in f:
if line.contains('foo'):
newline = line.replace('foo', 'bar')
# how to write this newline back to the file

最佳答案

最短的方法可能是使用 fileinput module .例如,以下将行号原地添加到文件中:

import fileinput

for line in fileinput.input("test.txt", inplace=True):
print('{} {}'.format(fileinput.filelineno(), line), end='') # for Python 3
# print "%d: %s" % (fileinput.filelineno(), line), # for Python 2

这里发生的是:

  1. 将原始文件移至备份文件
  2. 标准输出被重定向到循环内的原始文件
  3. 因此任何 print 语句都会写回到原始文件中

fileinput 有更多的花里胡哨。例如,它可用于自动操作 sys.args[1:] 中的所有文件,而无需显式地迭代它们。从 Python 3.2 开始,它还提供了一个方便的上下文管理器,可在 with 语句中使用。


虽然 fileinput 非常适合一次性脚本,但我会警惕在实际代码中使用它,因为不可否认它不是很易读或不熟悉。在实际(生产)代码中,值得多花几行代码来使过程明确,从而使代码可读。

有两种选择:

  1. 文件并不过大,您可以将其全部读入内存。然后关闭文件,以写入模式重新打开,将修改后的内容写回去。
  2. 文件太大,无法存储在内存中;您可以将其移至临时文件并打开它,逐行读取,然后写回原始文件。请注意,这需要两倍的存储空间。

关于python - 在 Python 中搜索和替换文件中的一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com