我只是简单地遍历一个外部文件(其中包含一个短语),并想看看是否存在一行(其中包含‘爸爸’这个词),如果我找到它,我想用‘妈妈’替换它。这是我建立的程序..。但我不知道它为什么不起作用!
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')这应该很简单.这让我很生气!谢谢。
发布于 2014-03-18 17:33:20
您没有任何行是"Dad"。您有一行是"Dad\n",但没有"Dad"。此外,由于您已经完成了message_file.read(),光标位于文件的末尾,因此for line in message_file将立即返回StopIteration。您应该在message_file.seek(0)循环之前执行for。
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)发布于 2014-03-18 17:33:24
print(message_file.read())这里你已经读过整个文件了。没有什么留给for循环检查的。
文件对象总是记得上次访问它时它停止读取/写入的位置。因此,如果您调用print(message_file.readline()),文件的第一行将被读取和打印。下一次调用相同的命令时,第二行将被读取和打印等等,直到文件结束为止。通过使用print(message_file.read()),您已经读取了整个文件,任何read或readline的进一步调用都不会给您带来任何好处。
您可以通过message_file.tell()获取当前位置,并通过message_file.seek(value)将其设置为某个值,或者只需重新打开文件。
发布于 2014-03-18 17:37:02
这个问题很可能是因为条件只匹配字符串“爸爸”,而字符串实际上是“爸爸\n”。您可以将条件更新为:
if line == "Dad\n":或
if "Dad" in line:最后,还在调用print(message_file.read())时读取整个文件。您要么需要删除该行,要么需要调用message_file.seek(0),以便后面的循环能够实际执行任何操作。
https://stackoverflow.com/questions/22486738
复制相似问题