Python统计文本文件关键词问题:打印内容后计数始终为0
Python文件读取指针导致统计结果为0的问题解决
问题原因
当你调用dummy_text.read()打印文件内容后,文件对象的内部读取指针会移动到文件末尾。此时再次调用dummy_text.read(),只能读取到空字符串,传给count_words函数后,空字符串里自然找不到任何关键词,统计结果就会是0。
核心知识点
- 文件对象是流式对象,读取操作会改变内部指针的位置:每读取一部分内容,指针就会向后移动对应的长度。
read()方法默认读取从当前指针位置到文件末尾的所有内容,读完后指针停在文件末尾,后续read()调用返回空字符串。with语句的作用是自动管理文件的打开和关闭,不会自动重置文件指针的位置。
解决办法
最直接高效的方式是一次性读取文件内容并保存到变量,后续打印和统计都使用这个变量,避免重复读取文件移动指针:
def dummytext(): with open("dummy.txt","r",encoding="utf8") as dummy_text: # 一次性读取全部内容到变量 content = dummy_text.read() print(content) # 使用变量打印内容 search_word=input("Which word to search for: ") # 把变量传给统计函数 return count_words(content, search_word) def count_words(search_text, search_word): search_count = search_text.count(search_word) return search_word, search_count result = dummytext() # 用f-string简化打印语句,更易读 print(f"The word {result[0]} appears {result[1]} times in the dummy text")
如果确实需要多次读取文件(比如文件过大无法一次性加载到内存),可以在每次读取前用seek(0)将指针重置到文件开头:
def dummytext(): with open("dummy.txt","r",encoding="utf8") as dummy_text: print(dummy_text.read()) dummy_text.seek(0) # 重置指针到文件开头 search_word=input("Which word to search for: ") return count_words(dummy_text.read(), search_word)
但这种方法需要重复读取文件,效率不如第一种,适合大文件场景。
内容的提问来源于stack exchange,提问作者Inselino
相关产品推荐
相关产品推荐

