我只是简单地遍历一个外部文件(其中包含一个短语),并想看看是否存在一行(其中有一个单词'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')
这应该很简单…我很生气!谢谢。你知道吗
没有任何行是
"Dad"
。有一行是"Dad\n"
,但没有"Dad"
。另外,由于您已经完成了message_file.read()
,光标位于文件的末尾,因此for line in message_file
将立即返回StopIteration
。您应该在for
循环之前执行message_file.seek(0)
。你知道吗这应该把光标放回文件的开头,去掉换行符,得到所需的内容。你知道吗
请注意,这个练习是一个很好的例子,说明了如何在一般情况下不做事!更好的实施方式是:
你已经看了整个文件了。 没有留下任何内容供for循环检查
文件对象总是记得上次访问它时它停止读/写的位置。 因此,如果调用
print(message_file.readline())
,则读取并打印文件的第一行。下次调用同一命令时,将读取并打印第二行,依此类推,直到到达文件末尾。通过使用print(message_file.read())
,您已经阅读了整个文件,任何进一步调用read
或readline
都不会给您任何帮助您可以通过
message_file.tell()
获取当前位置,并通过message_file.seek(value)
将其设置为某个值,或者只需重新打开文件这个问题很可能是因为您的条件将只匹配字符串“Dad”,而字符串实际上是“Dad\n”。您可以将条件更新为:
或者
最后,当您调用print(message)时,还读取整个文件_文件.read()). 您要么需要删除该行,要么需要给message打个电话_文件.seek(0)以便后面的循环实际执行任何操作。你知道吗
相关问题 更多 >
编程相关推荐