You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 01:10:29