Python文本文件统计异常求助:原3行处理后显示5行
问题分析与解决
你的问题核心是把“行”和“单词”的处理逻辑完全搞混了,咱们一步步拆解问题并修正:
错误点详解
- 行数统计逻辑错误:你用
data.split()得到的是所有单词的列表——split()默认会把所有空白字符(包括换行、空格、制表符)都当成分隔符,所以遍历这个列表时,line_count最后会等于单词总数,这就是为什么原本3行却统计出5行(刚好是你的文本里的单词数量)。 - 单词数计算重复累加:
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
相关产品推荐
相关产品推荐

