一、导出QQ聊天记录
在QQ当中选中一个群,把聊天记录导出成TXT文本格式,把导出的文件命名为 chatlog.txt
把导出的聊天记录,用记事本打开,另存为 utf-8 格式,覆盖保存,文件名仍然为 chatlog.txt
二、提取QQ号出现次数,即统计发言的数量
# -*- coding: utf-8 -*-
#
# Created by thiswind on 2016/11/10.
#
import pdb
import re
# read data from file
f = open('chatlog.txt')
data = f.read()
f.close()
# 查找所有出现的QQ号
# 用模式匹配两个括号之间一串数字的模式: '(一串数字)'
# \( 表示括号,因为 '(' 是关键字,所以要用 '\' 进行转义
# \) 同样表示括号,原因同上
# \d{3,12} 表示至少有3个数字,最多不超过12个数字,'\d'表示数字,{3,12} 表示数字的个数的范围
# 12位已经有一千亿,这个是银河系里恒星的数量,也是三百万年来所有人类加起来的总数(《2001: A Space Odyssey》),所以QQ号不应该超过12位了。
pa = re.compile(r'\(\d{3,12}\)')
# 得到命中的结果列表
hits = re.findall(pa, data)
print '命中的结果:'
print hits
print '-' * 10 # 打印一条横线
print '共 %s 次发言' % len(hits)
请自己运行查看结果。
三、统计多少个不同的QQ号发过言
运行上面的例子,会发现每一次发言的QQ号都被列出来了,其中有许多QQ号是重复的,我们如果要统计到底有多少人发过言,就要把重复的QQ号都删掉。
在Python当中,要删除一个列表当中的重复项,只需要使用集合<code>set</code>就可以了。学过数据结构的同学应该知道,集合是不允许元素重复的。
转换完成后,再用<code>list</code>把结果从心转换回列表
hits = .... # 上面代码当中的命中结果列表
# 删除命中结果中的重复项
person_list = list(set(hits))
完整的代码如下:
# -*- coding: utf-8 -*-
#
# Created by thiswind on 2016/11/10.
#
import pdb
import re
# read data from file
f = open('chatlog.txt')
data = f.read()
f.close()
# 查找所有出现的QQ号
# 用模式匹配两个括号之间一串数字的模式: '(一串数字)'
# \( 表示括号,因为 '(' 是关键字,所以要用 '\' 进行转义
# \) 同样表示括号,原因同上
# \d{3,12} 表示至少有3个数字,最多不超过12个数字,'\d'表示数字,{3,12} 表示数字的个数的范围
# 12位已经有一千亿,这个是银河系里恒星的数量,也是三百万年来所有人类加起来的总数(《2001: A Space Odyssey》),所以QQ号不应该超过12位了。
pa = re.compile(r'\(\d{3,12}\)')
# 得到命中的结果列表
hits = re.findall(pa, data)
print '命中的结果:'
print hits
print '-' * 10 # 打印一条横线
print '共 %s 次发言' % len(hits)
# 删除命中结果中的重复项
person_list = list(set(hits))
print '发言者列表'
print person_list
print '-' * 10 # 打印一条横线
print '共 %s 个不同的发言者' % len(person_list)
请自己运行查看结果
然后呢?
你现在已经可以提取QQ号了,也已经可以列出不同QQ号的出现数量了,那么你就可以根据"零基础学编程"——统计一天24小时当中每小时发言的数量,并用Excel画出图表的套路,绘制出每个人发言次数的图表了。
网友评论