如何在文本文件中搜索一个术语,然后用python中的新行替换整行?

时间:2016-02-14 15:07:38

标签: python python-3.x

我试图找到这个,但我最终找到了替换那个特定单词的代码。 我一直在使用这段代码:

phrase = open(club, 'a')
    for line in phrase:
        if line.contains(name):
            #what do i put here?
        else:
            pass
else:
    pass 

所以我想说我有一个包含sam 10的文本文件,我想用sam 5替换它。如果我用上面的代码做到这一点我怎么样?名称将保持不变,但数字不会。由于数字与每个名称不同,我将无法搜索数字,这就是我正在搜索名称的原因。我正在考虑使用line.replace,但这只会更改一个短语,而我希望整行更改。

编辑:这是在假设文本文件具有多个具有不同数字的不同人的名称的情况下进行的。我希望它搜索该特定名称并替换整行。

谢谢!

2 个答案:

答案 0 :(得分:0)

一般来说,有很多方法,其中之一是:

使用内置方法:

with open(club, 'r') as in_file, open('new_file', 'w') as out_file:
    for line in in_file:
        if name in line:
            out_file.write(new_line)
        else: 
            out_file.write(line)

但这会产生新文件的效果。

修改

如果您想要 inplace 替换,那么您可以使用fileinput模块,这样:

for line in fileinput.input(club, inplace=True):
    if name in line:
        line = 'NEW LINE' #Construct your new line here
        print(line) #This will print it into the file 
    else:
        print(line) #No Changes to be made, print line into the file as it is

引自docs

  

class fileinput.FileInput(files=None, inplace=False, backup='', bufsize=0, mode='r', openhook=None)   
......
  可选的就地过滤:   如果关键字参数inplace = True传递给fileinput.input()或   到FileInput构造函数,文件被移动到备份文件和   标准输出定向到输入文件(如果是相同的文件)   名称作为备份文件已存在,它将被静默替换)。   这使得编写重写其输入文件的过滤器成为可能   到位。

答案 1 :(得分:0)

您可以逐行检查以修改和修改原件以保存更改:

foreach (var weekDay in weekDays.Where(wd => potenDays.Contains(wd)))
{
    // Show weekDay
}