标题: [文本处理] 如何统计TXT文档中所有字母、数字和符号出现的次数 [打印本页]
作者: dragon631 时间: 2017-12-10 05:09 标题: 如何统计TXT文档中所有字母、数字和符号出现的次数
本帖最后由 dragon631 于 2017-12-10 05:11 编辑
“a.txt”文档中存入了如下内容:
UTL-17JFO-9840-UTL-17JFO-9841
UTL-17JFO-9841-UTL-17JFO-9842
UTL-17JFO-9842-UTL-17JFO-9843
UTL-17JFO-9843-UTL-17JFO-9844
UTL-17JFO-9843-UTL-17JFO-9845
UTL-17JFO-9844-UTL-17JFO-9845
UTL-17JFO-9845-UTL-17JFO-9846
UTL-17JFO-9846-UTL-17JFO-9847
UTL-17JFO-9847-UTL-17JFO-9848
UTL-17JFO-9848-UTL-17JFO-9849
UTL-17JFO-9849-UTL-17JFO-9850
UTL-17JFO-9850-UTL-17JFO-9851
UTL-17JFO-9851-UTL-17JFO-9852
UTL-17JFO-9852-UTL-17JFO-9853
UTL-17JFO-9853-UTL-17JFO-9854
UTL-17JFO-9854-UTL-17JFO-9855
UTL-17JFO-9855-UTL-17JFO-9856
UTL-17JFO-9856-UTL-17JFO-9857
UTL-17JFO-9857-UTL-17JFO-9858
UTL-17JFO-9858-UTL-17JFO-9859
UTL-17JFO-9859-UTL-17JFO-9860
UTL-17JFO-9860-UTL-17JFO-9861
UTL-17JFO-9861-UTL-17JFO-9862
UTL-17JFO-9862-UTL-17JFO-9863
UTL-17JFO-9863-UTL17-JFO-9864
UTL-17JFO-9863-UTL-17JFO-9864
UTL-17JFO-9864-UTL-17JFO-9865
UTL-17JFO-9865-UTL-17JFO-9866
UTL-17JFO-9866-UTL-17JFO-9867
UTL-17JFO-9866-UTL-17JFO-9967
UTL-17JFO-9867-UTL-17JFO-9868
UTL-17JFO-9868-UTL-17ODF-(1)17MX003
UTL-17ODF-(2-17MX003-UTL-17JFO-9869
UTL-17ODF-(2)17MX003-UTL-17JFO-9869
UTL-17JFO-9869-UTL-17JFO-9870
UTL-17JFO-9870-UTL-17JFO-9871
UTL-17JFO-9871-UTL-17JFO-9872
UTL-17JFO-9872-UTL-17JFO-9873
UTL-17JFO-9873-UTL-17JFO-9874
UTL-17JFO-9874-UTL-17JFO-9875
UTL-17JFO-9874-UTL-17JFO-9874
UTL-17JFO-9875-UTL-17JFO-9876
UTL-17JFO-9876-UTL-17JFO-9877
UTL-17JFO-9877-UTL-17JFO-9878
UTL-17JFO-9878-UTL-17JFO-9879
UTL-17JFO-9879-UTL-17JFO-9880
UTL-17JFO-9880-UTL-17JFO-9881
UTL-17JFO-9881-UTL-17JFO-9882
UTL-17JFO-9882-UTL-17JFO-9883
UTL-17JFO-9883-UTL-17JFO-9884
UTL-17JFO-9884-UTL-17JFO-9885
UTL-17JFO-9885-UTL-17JFO-9886
UTL-17JFO-9886-UTL-17JFO-9887
UTL-17JFO-9887-UTL-17ODF (1) Lumbala
想批量统计所有字母、数字和符号出现的次数【U、T、L、-、(、)、0、1、2……】:
U:108
T:108
L:109
(:4
┆
请问如何得到这样的结果?
作者: ivor 时间: 2017-12-10 10:29
本帖最后由 ivor 于 2017-12-10 15:03 编辑
回复 1# dragon631 - # -*- coding:utf-8 -*-
- # python 3.x
- # search ascii code
- import re, sre_constants
-
- patter = [chr(i) for i in range(33,126)]
-
- with open("a.txt","r") as file:
- content = file.read()
- for i in patter:
- try:
- result = len(re.findall(r"[%s]" % i,content))
- except sre_constants.error:
- result = len(re.findall(r"[\%s]" % i,content))
- if result != 0:
- print("%s:%d" % (i, result))
复制代码
101M文本 处理平均速度10.670418739318848秒
作者: dragon631 时间: 2017-12-10 14:46
回复 2# ivor
运行这个批处理,没得到什么结果?
作者: ivor 时间: 2017-12-10 15:09
回复 3# dragon631
需要安装Python 3运行,代码已更新,解决了特殊字符的问题
作者: CrLf 时间: 2017-12-10 15:31
命令行js:- mshta http://bathome.net/s/hta/index.html map={};type('a.txt').replace(/./g,function(c){map[c]=map[c]?map[c]+1:0});JSON.stringify(map)
复制代码
grep + uniq:- grep -o . a.txt | sort| uniq -c
复制代码
PowerShell:- [char[]] [string] (type a.txt) | group
复制代码
作者: codegay 时间: 2017-12-10 23:37
本帖最后由 codegay 于 2017-12-11 00:16 编辑
- # -*- coding: utf-8 -*-
- """
- Created on Sun Dec 10 23:28:33 2017
- @author: codegay
- python3 & 编辑器 == spyder
- """
-
- with open("a.txt") as f:
- txt = f.read()
- #剔除不想统计的字符如回车,括号
- char = list(set([r for r in txt if r not in """\n()()"""]))
- result = {r: txt.count(r) for r in char}
- # 排序
- result = sorted(result.items(), key=lambda d: d[1], reverse=True)
-
- from pprint import pprint
- pprint(result)
-
- """
- [('-', 270),
- ('7', 144),
- ('8', 127),
- ('1', 123),
- ('9', 114),
- ('L', 109),
- ('O', 108),
- ('T', 108),
- ('F', 108),
- ('U', 108),
- ('J', 104),
- ('6', 36),
- ('4', 34),
- ('5', 31),
- ('3', 15),
- ('0', 15),
- ('2', 12),
- ('D', 4),
- ('M', 3),
- ('X', 3),
- (' ', 2),
- ('a', 2),
- ('u', 1),
- ('b', 1),
- ('l', 1),
- ('m', 1)]
- """
- 加了个排序。
复制代码
作者: codegay 时间: 2017-12-11 02:05
- from collections import Counter
- from pprint import pprint
-
- def charlist(txtfile):
- with open(txtfile) as f:
- txt = [r for r in f.read() if r not in """\n() """]
- return txt
-
- pprint(Counter(charlist('a.txt')))
-
- '''
- Counter({'-': 270,
- '7': 144,
- '8': 127,
- '1': 123,
- '9': 114,
- 'L': 109,
- 'O': 108,
- 'T': 108,
- 'F': 108,
- 'U': 108,
- 'J': 104,
- '6': 36,
- '4': 34,
- '5': 31,
- '3': 15,
- '0': 15,
- '2': 12,
- 'D': 4,
- 'M': 3,
- 'X': 3,
- 'a': 2,
- 'u': 1,
- 'b': 1,
- 'l': 1,
- 'm': 1})
- '''
复制代码
这个方法用了python 的标准库 collections里的函数。
作者: codegay 时间: 2017-12-11 03:38
nim语言的版本,感觉也还行。主要是用了标准库 中的CountTable,代码量不算太多。- import tables
-
- var result = initCountTable[char]()
-
- for line in lines "a.txt":
- for c in line:
- result.inc c
- # 对统计结果排序
- sort result
-
- for k,v in pairs result:
- echo k,": ",v
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |