如何用Python统计文本文档中的非字母数字字符?新手代码求助
帮你搞定统计字符的Python程序
嘿,刚看了你的代码,发现几个小问题,咱们一步步来解决:
核心问题:遍历的是行而不是单个字符
你用infile.readlines()得到的是一个每行字符串组成的列表,所以for character in data循环里的character其实是一整行文本,不是单个字符!这就导致character.isupper()这类方法根本没法正确判断单个字符的属性,统计结果肯定不对。
修正方案
咱们改成把文件内容一次性读成一个完整字符串,或者嵌套循环遍历每行的每个字符。另外你还没写完非字母数字的统计逻辑,我一起帮你补上:
完整修正后的代码
# 用with语句自动管理文件,比直接open更安全 with open("Gettysburg.txt", "r") as infile: data = infile.read() # 一次性读取所有内容为单个字符串 non_alpha_num = 0 uppercase_count = 0 lowercase_count = 0 whitespace_count = 0 digit_count = 0 # 现在遍历的是单个字符啦 for character in data: if character.isupper(): uppercase_count += 1 elif character.islower(): lowercase_count += 1 elif character.isspace(): whitespace_count += 1 elif character.isdigit(): digit_count += 1 else: # 剩下的就是非字母数字字符了 non_alpha_num += 1 # 打印统计结果看看 print(f"大写字母: {uppercase_count}") print(f"小写字母: {lowercase_count}") print(f"空格: {whitespace_count}") print(f"数字: {digit_count}") print(f"非字母数字字符: {non_alpha_num}")
几个关键改进点
- 用
with语句打开文件:不用手动调用close(),文件会自动关闭,避免资源泄漏。 - 用
read()代替readlines():直接得到整个文本的字符串,遍历的时候就是单个字符。 - 补全了
else分支:专门统计那些既不是字母、空格也不是数字的字符,也就是你要的非字母数字字符。
如果你还是想用readlines()的话,也可以嵌套循环:
with open("Gettysburg.txt", "r") as infile: lines = infile.readlines() # 先遍历每一行,再遍历每行里的每个字符 for line in lines: for character in line: # 后面的判断逻辑和上面一样 if character.isupper(): uppercase_count += 1 # ... 其他判断和else分支
这样应该就能正确统计所有字符类型啦!
内容的提问来源于stack exchange,提问作者Jake
相关产品推荐
相关产品推荐

