Python 脚本未写入文件

Python 脚本未写入文件,python,Python,我想让它打开alan.txt,在文本中搜索所有scholary_tehologian实例,如果找到,在下面添加单词“test”。当我试着这样做时: ## Script with open('alan.txt', 'r+') as f: for line in f: if "scholarly_theologian" in line: f.write("test") 它不会写任何东西。我在Windows 8.1中重写了答案,因为最后一个答案是错误的 如果你想读行,你必须把

我想让它打开alan.txt,在文本中搜索所有scholary_tehologian实例,如果找到,在下面添加单词“test”。当我试着这样做时:

## Script
with open('alan.txt', 'r+') as f:
for line in f:
    if "scholarly_theologian" in line:
        f.write("test")

它不会写任何东西。我在Windows 8.1中重写了答案,因为最后一个答案是错误的

如果你想读行,你必须把.readlines()放在打开(…)f之后。然后有几种方法可以插入“test”


不能修改这样的文件。您只能附加到它,编写字符而不是其他字符,或者完全重写它。看

您应该做的是创建另一个包含所需内容的文件

编辑:


克劳迪奥的回答与我的回答一致。它的优点是(相对于manicphase的代码)不将整个文件保存在内存中。如果文件很长,这一点很重要。另一方面,manicphase的答案的好处是不创建第二个文件。它重写了原来的一个。选择一个适合你的需要。

这应该可以做到:

with open('output.txt', 'w') as o:
    with open('alan.txt', 'r') as f:
        for line in f:
            o.write(line)
            if line.find('scholarly_theoligian'):
                o.write('test')
如前所述,您需要创建一个新文件并将新内容添加到其中


如果不能使用两个文件,下一步将删除输入文件,并重命名输出文件。

这将用“test”覆盖接下来的四个字符。该文件确实有一行“scholarly_神学家”,我对其进行了测试。好的,那么我将“\ntest”放在哪里?用单词test?创建新行。如果您写了“\ntest”,则可能会覆盖接下来的五个字符。你不能“插入”到文本文件中,你只能附加。我要找的短语是“学者神学家”,即使我这样做,它仍然不起作用,但感谢你回答我的问题。现在完全重新编写答案。使用
xrange(len(line))
而不是
range(line)
我的意思是在一行编辑之前。现在它又错了,应该是“\n”。像以前一样加入(行)
with open('output.txt', 'w') as o:
    with open('alan.txt', 'r') as f:
        for line in f:
            o.write(line)
            if line.find('scholarly_theoligian'):
                o.write('test')