为什么这个简单的搜索不起作用?

2024-09-21 05:35:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是简单地遍历一个外部文件(其中包含一个短语),并想看看是否存在一行(其中有一个单词'Dad')如果我找到它,我想用'Mum'替换它。这是我建立的程序。。。但我不知道为什么它不起作用?!你知道吗

message_file = open('test.txt','w')
message_file.write('Where\n')
message_file.write('is\n')
message_file.write('Dad\n')
message_file.close()

message_temp_file = open('testTEMP.txt','w')
message_file = open('test.txt','r')

for line in message_file:
    if line == 'Dad':  # look for the word
        message_temp_file.write('Mum')  # replace it with mum in temp file
    else:
        message_temp_file.write(line)  # else, just write the word

message_file.close()
message_temp_file.close()

import os
os.remove('test.txt')
os.rename('testTEMP.txt','test.txt')

这应该很简单…我很生气!谢谢。你知道吗


Tags: intesttxtmessageforcloseosline
3条回答

没有任何行是"Dad"。有一行是"Dad\n",但没有"Dad"。另外,由于您已经完成了message_file.read(),光标位于文件的末尾,因此for line in message_file将立即返回StopIteration。您应该在for循环之前执行message_file.seek(0)。你知道吗

print(message_file.read())
message_file.seek(0)
for line in message_file:
    if line.strip() == "Dad":
        ...

这应该把光标放回文件的开头,去掉换行符,得到所需的内容。你知道吗

请注意,这个练习是一个很好的例子,说明了如何在一般情况下不做事!更好的实施方式是:

in_ = message_file.read()
out = in_.replace("Dad","Mum")
message_temp_file.write(out)
print(message_file.read())

你已经看了整个文件了。 没有留下任何内容供for循环检查

文件对象总是记得上次访问它时它停止读/写的位置。 因此,如果调用print(message_file.readline()),则读取并打印文件的第一行。下次调用同一命令时,将读取并打印第二行,依此类推,直到到达文件末尾。通过使用print(message_file.read()),您已经阅读了整个文件,任何进一步调用readreadline都不会给您任何帮助

您可以通过message_file.tell()获取当前位置,并通过message_file.seek(value)将其设置为某个值,或者只需重新打开文件

这个问题很可能是因为您的条件将只匹配字符串“Dad”,而字符串实际上是“Dad\n”。您可以将条件更新为:

if line == "Dad\n":

或者

if "Dad" in line:

最后,当您调用print(message)时,还读取整个文件_文件.read()). 您要么需要删除该行,要么需要给message打个电话_文件.seek(0)以便后面的循环实际执行任何操作。你知道吗

相关问题 更多 >

    热门问题