首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么这个简单的搜索不起作用?

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

Stack Overflow用户
提问于 2014-03-18 17:30:05
回答 3查看 67关注 0票数 2

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

代码语言:javascript
复制
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')

这应该很简单.这让我很生气!谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-18 17:33:20

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

代码语言:javascript
复制
print(message_file.read())
message_file.seek(0)
for line in message_file:
    if line.strip() == "Dad":
        ...

这应该把光标放回文件的开头,去掉换行符,得到你需要的东西。

请注意,这个练习是一个很好的例子,说明了如何在一般情况下不做事情!更好的执行办法是:

代码语言:javascript
复制
in_ = message_file.read()
out = in_.replace("Dad","Mum")
message_temp_file.write(out)
票数 5
EN

Stack Overflow用户

发布于 2014-03-18 17:33:24

代码语言:javascript
复制
print(message_file.read())

这里你已经读过整个文件了。没有什么留给for循环检查的。

文件对象总是记得上次访问它时它停止读取/写入的位置。因此,如果您调用print(message_file.readline()),文件的第一行将被读取和打印。下一次调用相同的命令时,第二行将被读取和打印等等,直到文件结束为止。通过使用print(message_file.read()),您已经读取了整个文件,任何readreadline的进一步调用都不会给您带来任何好处。

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

票数 3
EN

Stack Overflow用户

发布于 2014-03-18 17:37:02

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

代码语言:javascript
复制
if line == "Dad\n":

代码语言:javascript
复制
if "Dad" in line:

最后,还在调用print(message_file.read())时读取整个文件。您要么需要删除该行,要么需要调用message_file.seek(0),以便后面的循环能够实际执行任何操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22486738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档