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

Python文本文件统计异常求助:原3行处理后显示5行

问题分析与解决

你的问题核心是把“行”和“单词”的处理逻辑完全搞混了,咱们一步步拆解问题并修正:

错误点详解

  1. 行数统计逻辑错误:你用data.split()得到的是所有单词的列表——split()默认会把所有空白字符(包括换行、空格、制表符)都当成分隔符,所以遍历这个列表时,line_count最后会等于单词总数,这就是为什么原本3行却统计出5行(刚好是你的文本里的单词数量)。
  2. 单词数计算重复累加:word_count += len(wordslist)这行代码,每循环一次就把总单词数加一遍,最后得到的是「单词数 × 单词数」的错误结果,完全不是实际的单词数量。

修正后的代码

要实现你的需求(统计原文件行数,同时清理标点后统计单词数),可以这样写:

word_count = 0
line_count = 0

with open('book.txt','r') as file:
    # 按行读取文件,直接统计原始行数
    lines = file.readlines()
    line_count = len(lines)
    
    # 逐行清理标点
    cleaned_content = []
    for line in lines:
        for char in ': , . ! ?':
            line = line.replace(char, ' ')
        cleaned_content.append(line)
    
    # 合并清理后的内容,统计单词数
    all_words = ' '.join(cleaned_content).split()
    word_count = len(all_words)

print(f"单词数: {word_count}, 行数: {line_count}")

如果你的需求是统计清理内容后的行数(其实标点替换不会产生新行,因为我们只替换标点为空格,换行符保留),上面代码里的line_count = len(lines)依然有效。

额外优化小技巧

可以用字符串的translate()方法更高效地批量替换标点,比循环replace()更简洁:

# 定义要移除的标点集合
punctuations = ': , . ! ?'
# 创建翻译表:把指定标点替换为空(即移除)
translator = str.maketrans('', '', punctuations)

word_count = 0
line_count = 0

with open('book.txt','r') as file:
    lines = file.readlines()
    line_count = len(lines)
    
    # 批量清理每一行的标点
    cleaned_lines = [line.translate(translator) for line in lines]
    all_words = ' '.join(cleaned_lines).split()
    word_count = len(all_words)

print(f"单词数: {word_count}, 行数: {line_count}")

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:57:58