Python如何不使用rstrip()方法统计文本文件总词数
问题解决方案
你完全不需要依赖rstrip()方法就能得到完全一致的统计结果,核心原理和实现方式如下:
核心原理
Python中字符串的split()方法不传入任何参数时,会自动以任意空白字符作为分隔符,包括空格、制表符、行尾的换行符\n、回车符\r,同时会自动忽略字符串首尾的所有空白、将连续的多个空白字符合并视为单个分隔符,不会产生空的无效词项。
也就是说,哪怕读取到的行末尾自带换行符,直接调用split()得到的单词列表长度,和先去掉换行符再split的结果完全一致,不会影响词数统计、最长行判断的结果。
最简实现(直接删除冗余代码即可)
原代码中line = line.rstrip("\n")本身就是冗余代码,直接删掉这行就能得到总词数26466的正确结果,修改后可运行的完整代码如下:
words_count = 0 lines_count = 0 line_max = None lines = [] # 补全原代码未初始化的列表,避免运行报错 file = open("alice.txt", "r") for line in file: words = line.split() words_count += len(words) if line_max == None or len(words) > len(line_max.split()): line_max = line lines.append(line) file.close()
兼容场景:需要移除行尾换行符存储的实现
如果答题要求最终存入lines列表的行内容必须和原逻辑一致(不带末尾换行符),又不允许使用rstrip(),可以用基础的字符串判断+切片操作实现完全相同的效果,这部分属于Python基础字符串切片语法,不属于未讲授的方法:
把原来的rstrip()行替换为以下代码即可:
# 移除Unix/Linux/macOS系统的行尾\n换行符 if len(line) > 0 and line[-1] == "\n": line = line[:-1] # 兼容Windows系统的\r\n换行格式 if len(line) > 0 and line[-1] == "\r": line = line[:-1]
替换后代码的运行结果和原代码100%一致,总词数统计结果为26466,存入lines的行内容也和原逻辑完全相同。
内容的提问来源于stack exchange,提问作者Frorayz
相关产品推荐
相关产品推荐

