为了账号安全,请及时绑定邮箱和手机立即绑定

在Python中搜索并替换文件中的一行

在Python中搜索并替换文件中的一行

天涯尽头无女友 2019-06-05 16:15:19
在Python中搜索并替换文件中的一行我想循环一个文本文件的内容,并在一些行上进行搜索和替换,并将结果写回该文件。我可以先在内存中加载整个文件,然后将其写回去,但这可能不是最好的方法。在下面的代码中,最好的方法是什么?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
查看完整描述

3 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

最短的方法可能是使用文件输入模块..例如,以下内容将行号添加到文件中:

import fileinputfor line in fileinput.input("test.txt", inplace=True):
    print "%d: %s" % (fileinput.filelineno(), line),

这里发生的是:

  1. 原始文件被移动到备份文件中。
  2. 标准输出重定向到循环中的原始文件。
  3. 因此任何

    print

    语句写入原始文件中。

fileinput有更多的钟声和口哨。例如,它可以用于对sys.args[1:],而不必显式地迭代它们。从Python3.2开始,它还提供了一个方便的上下文管理器,用于with声明。


fileinput对于丢弃的脚本来说,这是很棒的,我会谨慎地在实际代码中使用它,因为无可否认,它不是很可读的或熟悉的。在实际的(生产)代码中,只需再花几行代码就可以使流程显式化,从而使代码具有可读性。

有两种选择:

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


查看完整回答
反对 回复 2019-06-05
?
浮云间

TA贡献1829条经验 获得超3个赞

下面是另一个经过测试的示例,它将匹配搜索和替换模式:

import fileinputimport sysdef replaceAll(file,searchExp,replaceExp):
    for line in fileinput.input(file, inplace=1):
        if searchExp in line:
            line = line.replace(searchExp,replaceExp)
        sys.stdout.write(line)

示例使用:

replaceAll("/fooBar.txt","Hello\sWorld!$","Goodbye\sWorld.")


查看完整回答
反对 回复 2019-06-05
  • 3 回答
  • 0 关注
  • 2238 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信