吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 721|回复: 18
收起左侧

[学习记录] 统计文本文件中汉字字母数字符号的个数及总计

[复制链接]
top7777 发表于 2025-5-12 09:02
因工作原因有此需求,特借助trae并调试生成如下python代码:
[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import re
import string
import os  # 新增:用于路径处理
 
 
def count_text_elements(file_path):
    # 初始化计数器(新增英文字母和阿拉伯数字统计)
    chinese_chars = 0
    english_words = 0  # 保留统计但不纳入总数量
    punctuation = 0
    english_letters = 0  # 新增:英文字母数
    arabic_numbers = 0   # 新增:阿拉伯数字数
 
    # 扩展标点符号集合(包含中文常用标点)
    chinese_punctuation = ',。!?;:“”‘’()【】《》—~…¥'
    all_punctuation = set(string.punctuation + chinese_punctuation)
 
    # 读取文件内容(支持多编码尝试)
    content = None
    encodings = ['utf-8', 'gbk', 'gb2312', 'cp1252'# 常见编码列表
    for encoding in encodings:
        try:
            with open(file_path, 'r', encoding=encoding) as f:
                content = f.read()
                break  # 成功读取后退出循环
        except UnicodeDecodeError:
            continue  # 尝试下一个编码
    if content is None:
        raise ValueError(f'无法用以下编码读取文件:{encodings}')
 
    # 合并遍历:统计汉字、标点、英文字母、阿拉伯数字(一次遍历提升效率)
    for char in content:
        # 统计汉字(Unicode范围:u4e00-u9fff)
        if '\u4e00' <= char <= '\u9fff':
            chinese_chars += 1
        # 统计标点符号
        elif char in all_punctuation:
            punctuation += 1
        # 统计英文字母(a-zA-Z)
        elif 'a' <= char.lower() <= 'z':
            english_letters += 1
        # 统计阿拉伯数字(0-9)
        elif char.isdigit():
            arabic_numbers += 1
 
    # 统计英文单词(保留原逻辑,但不纳入总数量)
    word_pattern = re.compile(r'\b[a-zA-Z]+\b')
    english_words = len(word_pattern.findall(content))
 
    # 总数量调整:剔除英文单词,加入英文字母和阿拉伯数字
    total = chinese_chars + punctuation + english_letters + arabic_numbers
 
    return {
        'chinese_chars': chinese_chars,
        'english_words': english_words,
        'punctuation': punctuation,
        'english_letters': english_letters,  # 新增返回项
        'arabic_numbers': arabic_numbers,    # 新增返回项
        'total': total
    }
 
 
if __name__ == '__main__':
    # 获取当前脚本所在的绝对目录路径
    script_dir = os.path.dirname(os.path.abspath(__file__))  # 新增
     
    # 用户输入文件名或路径
    user_input = input('请输入要统计的txt文件路径(绝对路径或仅文件名,仅文件名时默认程序所在目录): ')
     
    # 补全路径:若输入不包含目录分隔符,则拼接程序所在目录
    if '\\' not in user_input:  # Windows目录分隔符为\
        file_path = os.path.join(script_dir, user_input)
    else:
        file_path = user_input
 
    try:
        result = count_text_elements(file_path)
        print('统计结果:')
        print(f'汉字数量:{result["chinese_chars"]}')
        print(f'英文单词数量:{result["english_words"]}'# 保留显示但不纳入总数量
        print(f'标点符号数量:{result["punctuation"]}')
        print(f'英文字母数量:{result["english_letters"]}'# 新增显示项
        print(f'阿拉伯数字数量:{result["arabic_numbers"]}'# 新增显示项
        print(f'总数量(汉字+标点+字母+数字):{result["total"]}'# 调整总数量说明
    except FileNotFoundError:
        print(f'错误:文件 {file_path} 未找到,请检查输入(绝对路径或程序所在目录下的文件名)。')
    except ValueError as e:
        print(f'错误:{str(e)},请确认文件编码是否为常见类型(如UTF-8/GBK)。')
    except Exception as e:
        print(f'发生未知错误:{str(e)}')

免费评分

参与人数 3吾爱币 +3 热心值 +1 收起 理由
用户SVIP + 1 我很赞同!
shengruqing + 1 热心回复!
wuloveyou + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

TaDose 发表于 2025-5-12 09:23
感谢分享!!!!!!!!!!!!!!!!!
beyondchampion 发表于 2025-5-12 09:48
gelatoni 发表于 2025-5-12 09:52
新人求问,是自己要装个python,把这个放在程序里运行即可吗?能否求一个详细的运行说明。
forumid 发表于 2025-5-12 09:53
实用的代码,谢谢分享!
 楼主| top7777 发表于 2025-5-12 09:56
gelatoni 发表于 2025-5-12 09:52
新人求问,是自己要装个python,把这个放在程序里运行即可吗?能否求一个详细的运行说明。

对,网上下个python(3.9以后)并安装,重启后用python+脚本名.py进行运行,也可以用pyinstall的console模式编译成exe文件。
dogpile 发表于 2025-5-12 10:25
不错的代码,谢了。
ashirogimuto 发表于 2025-5-12 10:56
多谢多谢
638 发表于 2025-5-12 11:06
感谢分享,有需要的时候正好用上。。。。
jyjjf 发表于 2025-5-12 11:48
再改改,改成批量处理的,对应输出到excel格式
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-5-23 16:04

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表