Python:在一行中搜索一个STR1,然后用STR2替换整行。

0 人关注

我有一个文件,我需要在其中搜索 STR1 并替换含有 STR2 的整行。例如, file1 包含以下数据

Name: John
Height: 6.0
Weight: 190
Eyes: Blue

我需要在上述文件中搜索Name,然后将整行替换为Name: Robert。我可以在sed中轻松地完成这个任务,如

sed -i 's/.*Name.*/Name:Robert/' file1

但如何在Python中得到同样的结果。例如,我可以用fileinput将一个字符串替换成另一个字符串,如下所示

#! /usr/bin/python
import fileinput
for line in fileinput.input("file1", inplace=True):
    # inside this loop the STDOUT will be redirected to the file
    # the comma after each print statement is needed to avoid double line breaks
    print line.replace("Name: John", "Name: Robert"),

如何修改上述代码以替换整行,使用'*'替换文件中的所有行,即使有一个搜索条件(if "Name" in line)。

4 个评论
上面的代码怎么没有达到你想要的效果,什么是 使用 '*' 替换文件中的所有行。 到底是什么意思?
import re; line = re.sub('.*Name.*/', 'Name:Robert', line) ?
我想用字符串 Name 而不是 Name: John 作为搜索和替换整行,因为我不知道 John 的值。替换代码3】将整个文件替换为字符串 Name: Robert
反对者应该有风度,告诉大家这个问题有什么问题。
python
string
file
replace
io
rambalachandran
rambalachandran
发布于 2016-07-12
2 个回答
Nicholas Anderson
Nicholas Anderson
发布于 2016-07-12
已采纳
0 人赞同

你可以使用 string.find() 来确定一个字符串是否在另一个字符串内。 相关的Python文档 .

#! /usr/bin/python
import fileinput
for line in fileinput.input("file1", inplace=True):
    if line.find("Name:") >= 0:
        print "Name: Robert"
    else:
        print line[:-1]
    
OP已经知道了 if "Name" in line ,而且他仍然有问题,所以我怀疑 find 会好一点。
行[:-1]起到了作用。但为什么是 : ?我以为最后一个条目可以简单地用 [-1] 访问。
只用 [-1] 就可以访问最后一个字符,加上冒号就变成了拼接,所以现在它要抓取从第2个索引到最后一个索引减去1的所有内容。
这很好,花了很长时间才找到。另外,这个问题是合法的。讨厌python问题的人是不真实的。不是一个好的社区。
TheLazyScripter
TheLazyScripter
发布于 2016-07-12
0 人赞同

应该完全按照你的要求去做。

def replace_basic(key_to_replace, new_value, file):
    f = open(file, 'rb').readlines()
    with open(file, 'wb') as out:
        for line in f:
            if key_to_replace in line: