Python读取文本文件:循环实现行号显示与字符单词统计求助
基于生成器实现文件读取与统计的解决方案
你已经写的gen_lines()生成器可以很好地逐行读取文件,接下来我们基于它完成所有任务,同时严格遵守不能用len、split或正则的限制:
完整代码实现
# 你提供的生成器函数,负责逐行读取文件 def gen_lines(): with open("file_x.txt", "r") as in_file: for line in in_file: yield line def main(): # 初始化统计变量 line_count = 0 char_count = 0 word_count = 0 in_word = False # 标记当前是否处于一个单词中 # 遍历生成器返回的每一行 for line_num, line in enumerate(gen_lines(), start=1): # 打印带行号的内容 print(f"第{line_num}行: {line}", end="") # line本身带换行符,用end=""避免重复换行 # 统计行数 line_count += 1 # 逐个字符处理,统计字符数和单词数 for char in line: # 统计字符数 char_count += 1 # 判断是否为空白字符(空格、制表符、换行符等) is_whitespace = char in (' ', '\t', '\n', '\r') if not is_whitespace and not in_word: # 遇到非空白且之前不在单词里,说明是新单词的开始 word_count += 1 in_word = True elif is_whitespace and in_word: # 遇到空白且之前在单词里,说明单词结束 in_word = False # 输出统计信息 print("\n=== 文件统计信息 ===") print(f"总行数: {line_count}") print(f"总字符数: {char_count}") print(f"总单词数: {word_count}") if __name__ == "__main__": main()
关键逻辑说明
- 行号打印:用
enumerate(gen_lines(), start=1)直接给生成器的每一行加上从1开始的行号,不用手动维护计数器。 - 字符统计:通过遍历每行的每个字符,每遍历一个就给
char_count加1,完全避开len函数。 - 单词统计:用
in_word标记位判断单词边界——当从空白字符切换到非空白字符时,判定为新单词,给word_count加1;从非空白切换到空白时,标记单词结束,完全不用split或正则。 - 生成器的优势:逐行读取文件,不会一次性把整个文件加载到内存,适合处理大文件。
内容的提问来源于stack exchange,提问作者justinsam
相关产品推荐
相关产品推荐

