我只是在外部文件(包含一个短语)中进行迭代,并希望查看是否存在一行(其中包含“爸爸”一词)如果我找到它,我想用“妈妈”替换它。这是我建立的程序......但我不确定它为什么不起作用?!
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')
这应该是这么简单......这让我生气!感谢。
答案 0 :(得分:5)
您没有任何"Dad"
行。您有一行"Dad\n"
,但没有"Dad"
。此外,由于您已完成message_file.read()
,因此光标位于文件的末尾,因此for line in message_file
会立即返回StopIteration
。您应该在message_file.seek(0)
循环之前for
进行。{/ p>
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)
答案 1 :(得分:3)
print(message_file.read())
这里你已经阅读了整个文件。 没有留下for循环来检查
文件对象始终会记住上次访问时它停止读/写的位置。
因此,如果您调用print(message_file.readline())
,则会读取并打印文件的第一行。下次调用相同的命令时,将读取并打印第二行,依此类推,直到到达文件末尾。使用print(message_file.read())
,您已阅读整个文件,而read
或readline
的任何进一步调用都不会给您任何信息
您可以按message_file.tell()
获取当前位置,并按message_file.seek(value)
将其设置为某个值,或者只是重新打开文件
答案 2 :(得分:2)
问题很可能是由于条件只匹配字符串"爸爸",当字符串实际上是"爸爸\ n"。您可以将条件更新为:
if line == "Dad\n":
OR
if "Dad" in line:
最后,当您调用print(message_file.read())时,您还会读取整个文件。您需要删除该行,或者您需要调用message_file.seek(0),以便后面的循环实际执行任何操作。