读取文本文件时for循环输出不符合预期,请求排查问题
问题分析与解决
嘿,我来帮你捋捋代码里的问题,其实是两个小细节没注意到~
错误点1:文件读取指针的问题
你的txt文件里只有一行内容:this is a demo file for exercises thanks bye,当你第一次调用f.readline()的时候,已经把这整行内容读出来并打印了,这时候文件的读取指针已经移到了文件末尾。第二次f.readline()其实返回的是空字符串(只是你打印了也看不到),后面的for word in f循环根本不会执行——因为已经没有内容可读了,自然没法检查"thanks"这个单词。
错误点2:遍历的是行,不是单词
就算文件还有内容没读,for word in f这个写法是按行遍历文件,每次循环的word变量拿到的是一整行文本,而不是单个单词。你拿整行内容和单个单词"thanks"做相等判断,肯定匹配不上呀。
修正后的代码
这里给你两种可行的写法,推荐第二种(更规范):
写法一:手动管理文件(记得关闭)
f = open("demo.txt", "r") # 读取唯一一行,去掉首尾的空白字符(比如换行符) content_line = f.readline().strip() # 按空格把行内容分割成单个单词的列表 word_list = content_line.split() for word in word_list: if word == "thanks": print("found it") break # 找到后可以提前退出循环,节省资源 f.close() # 一定要记得关闭文件
写法二:用with语句自动管理文件(推荐)
with语句会在代码块结束后自动关闭文件,避免忘记关文件导致的资源浪费:
with open("demo.txt", "r") as f: # 逐行遍历文件(这里文件只有一行,循环只会执行一次) for line in f: # 分割成单词列表 words = line.strip().split() for word in words: if word == "thanks": print("found it") break
这样运行代码,就能成功输出"found it"啦~
内容的提问来源于stack exchange,提问作者nephele
相关产品推荐
相关产品推荐

