Python读取文件无法获取第一行的问题求助(词频统计作业)
问题分析与解决
你的代码丢失第一行内容的核心原因是文件指针的移动逻辑错误:
- 执行
for line in File时,文件对象的指针已经读取了第一行内容,但你没有对这行做任何处理; - 紧接着调用
File.read(),会从当前指针位置(第一行末尾)开始读取剩余内容,自然就漏掉了第一行。
修正方案
方案1:直接读取全部文件内容(更适合统计单词次数的场景)
去掉多余的for line in File循环,一次性读取整个文件,同时集成单词统计逻辑:
while True: try: file_name = input("Enter file name ") target_word = input("Enter target word to count: ").lower() with open(file_name, "r") as file: print("File opened") # 读取全部文件内容 text = file.read() print("File Read") # 清理标点并统一转小写 cleaned_text = text.replace(".", " ").replace(","," ").replace("!", " ").replace("?", " ").replace(":", " ").replace(";", " ").lower() print("File edited") print(cleaned_text) # 统计目标单词出现次数 word_count = cleaned_text.split().count(target_word) print(f"Word '{target_word}' appears {word_count} times") except FileNotFoundError: print("Invalid File Name, please retry") continue except Exception as e: print(f"An error occurred: {e}") continue
方案2:逐行处理文件内容(适合大文件,降低内存占用)
如果文件体积较大,不想一次性加载全部内容,可以逐行处理并累加统计结果:
while True: try: file_name = input("Enter file name ") target_word = input("Enter target word to count: ").lower() word_count = 0 with open(file_name, "r") as file: print("File opened") for line in file: # 逐行清理标点并转小写 cleaned_line = line.replace(".", " ").replace(","," ").replace("!", " ").replace("?", " ").replace(":", " ").replace(";", " ").lower() # 累加当前行的目标单词数量 word_count += cleaned_line.split().count(target_word) print(f"Word '{target_word}' appears {word_count} times") except FileNotFoundError: print("Invalid File Name, please retry") continue except Exception as e: print(f"An error occurred: {e}") continue
额外优化建议
- 变量名遵循Python小写加下划线的规范(比如
File_Name改为file_name),提升代码可读性; - 避免捕获所有异常,改为针对性捕获
FileNotFoundError,其他异常单独处理,方便排查问题。
内容的提问来源于stack exchange,提问作者Aidan Ama
相关产品推荐
相关产品推荐

