三个月没看QQ群了。

群里有同学分享的近期答辩注意事项,于是乎想把近期QQ聊天记录从头到尾过一遍。

导出聊天记录文本,发觉上万行的文本,这么读效率有点低,所以用python整理了一下。

这个是整理前的(手机端QQ聊天记录导出后的txt文件):

这个是整理后的:

附上代码:

2016.12.2 加了个自动换行的代码,避免单行过长。

2018.1.30 根据lch1251680944、qq_20408711反馈,修正正则表达式

2019.10.18 根据反馈,调整正则表达式

#!/usr/bin/env python3
# -*- coding: utf-8 -*-import re
import codecsscript_name = "QQ聊天记录整理"# 1、通过正则语句,提取出所有的记录头和记录内容两个数组。一条记录头对应一条记录内容,所以两个数组长度应该相等。
# 2、处理记录内容
#     2.1、windows的换行为'\r\n',单'\n'体现不出换行效果。手机端导出的记录有的换行是\n,需要替换一下。
#     2.2、记录头放在了每条记录末行后面,为了记录头整齐美观,需要计算一下记录头前补多少空格。windows记事本显示中文字符占两格,英文占1格,而python中文字符长度是却是1,如果想要显示整齐,还需要计算一下,然后补齐空格数。补齐后记录头距离行首位置为100的整数倍。
# 3、读和写文件的时候注意编码转换def length_w(text):'''计算字符串在windows记事本中的实际显示长度'''# 取文本长度,中文按2格计算。length      = len(text)                          # 取其长度(中文字符长度为1,英文1)utf8_length = len(text.encode('utf-8'))          # 取其长度(中文长3,英文1)length      = int((utf8_length-length)/2)+length # 按(中文2英文1)计算长度# 这个写法实际上还是有问题的,有些特殊字符会导致计算长度和实际显示长度不一致。所以下面计算换行问题的代码中换了另一种写法,避免因特殊字符导致每行实际显示长度超出限定值,虽然还是不精确,但是不会超出限定值。# 比如:# '°'在记事本中显示占2格,b'\xc2\xb0'utf-8编码长度为2。# '�'在记事本中显示占1格,b'\xef\xbf\xbd'utf-8编码长度为3。# ''在记事本中显示占2格,b'\x01'utf-8编码长度为1。(特殊字符无法显示)# 至于特殊'\t'制表符最好最开始就用四个空格替换掉,避免其自动缩进带来的影响return lengthdef chinese_linefeed(text,limit):'''中英文混合排版,限制单行长度,超出长度换行'''text_format= '' # 结果变量,初始化text = text.replace('\t','    ')text = text.replace('\r\n','\n')text_arr = text.split('\n') # 按行分割文本for line in text_arr:# 逐行处理text_format+='\r\n'num = 0 # 长度计数变量,初始化for i in line:# 从该行第一个字符起计算长度# 中文长度为2# asc2码(英文及其字符等)长度为1# 其他长度为2(一些特殊)if i >= u'\u4e00' and i <= u'\u9fa5':char_len=2elif i >= u'\u001c' and i <= u'\u00ff':char_len=1else:char_len=2# 累计长度小于limit,直接保存至结果变量,计数变量累加# 累计长度大于limit,换行后再保存,计数变量重置if num+char_len<=limit:text_format+=inum+=char_lenelse:text_format+='\r\n'+inum=char_lenreturn text_format.strip()# QQ聊天记录手机端导出文本
filepath = r'C:\Users\waterd\Desktop\QQ群聊天记录.txt'# 读取文件
fp = codecs.open(filepath,'r','utf-8')
txt = fp.read()
fp.close()re_pat = r'20[\d-]{8}\s[\d:]{7,8}\s+[^\n]+(?:\d{5,11}|@[\.\w]+\.[comnet]{2,3}[\>\)])'  # 正则语句,匹配记录头
log_title_arr = re.findall(re_pat, txt) # 记录头数组['2016-06-24 15:42:52  张某(40**21)',…]
log_content_arr = re.split(re_pat, txt) # 记录内容数组['\n', '\n选修的\n\n', '\n就怕这次…]
log_content_arr.pop(0)                  # 剔除掉第一个(分割造成的冗余部分)# 数组长度
l1 = len(log_title_arr)
l2 = len(log_content_arr)
print('记录头数: %d\n记录内容: %d'%(l1,l2))if l1==l2:# 整理后的记录log_format = ''# 开始整理for i in range(0,l1):title       = log_title_arr[i]                   # 记录头content     = log_content_arr[i].strip()         # 删记录内容首尾空白字符content     = content.replace('\r\n','\n')       # 记录中的'\n',替换为'\r\n'content     = content.replace('\n','\r\n')content     = chinese_linefeed(content,100)      # 每行过长自动换行lastline    = content.split('\r\n')[-1]          # 取记录内容最后一行length      = length_w(lastline)                 # 取其长度space = (100-(length%100))*' ' if length%100!=0 else ''# 该行记录头前补空格,变整齐为100整数倍;余数为0则不用补空格log_format += content + space + '['+title+']\r\n'# 拼接合成记录# 写到文件fp = codecs.open(filepath+'format.txt','w','utf-8')fp.write(log_format)fp.close()print("整理完毕~^_^~")
else:print('记录头和记录内容条数不匹配,请修正代码')

用Python3对QQ导出的文本聊天记录进行整理。相关推荐

  1. #Python3控制QQ窗口

    Python3控制QQ窗口 这里写一个简单的控制,其他的窗口也一个样 EnumWindows (需要回调的函数,参数): 该函数枚举所有屏幕上的顶层窗口, 并将窗口句柄传送给应用程序定义的回调函数. ...

  2. Impala 查询导出到文本,本地系统

    Hive查询导出到文本使用 insert overwrite local directory 在Impala中不支持,Impala使用,注意--output_delimiter与-B 一同使用,否则不 ...

  3. java 富文本 word_Java导出富文本到word

    源码地址: 背景 最近用java开发一个中车项目管理系统,里面有一个维修单word导出功能. 可用方案 在网上查找资料,总结出两种比较可行的方案. (1) 制作word模板,导出成mht文件(单页面网 ...

  4. 导出富文本格式word

    /*try {*//*** 关键地方* 生成word格式*//*POIFSFileSystem poifs = new POIFSFileSystem();DirectoryEntry directo ...

  5. java freemarker 导出富文本到Word文档

    最近一直在加班 导致看到代码就想吐 今天抽出时间来记录一下 用freemaker导出富文本信息 之前使用freemaker导出图片等信息时 使用的是xml方式,不明白的 可以看 freemaker生成 ...

  6. springboot导出富文本框数据到word

    这里需要注意的是:依赖的版本号都是一一对应的,如果使用不兼容的版本号,可能会报编译异常和缺少类的错误,这里已提供对应的所需依赖和版本号,大家可以参考一下. 具体的api文档可以参考官网api,很好理解 ...

  7. python3发送qq邮件_python3通过qq邮箱发送邮件以及附件

    本文实例为大家分享了python3通过qq邮箱发送邮件以及附件的具体代码,供大家参考,具体内容如下ZLP免费资源网 开启qq邮箱的smtp服务ZLP免费资源网 ZLP免费资源网 代码:ZLP免费资源网 ...

  8. python3 根据sql导出excel文件 支持xls和xlsx

    python3 根据sql导出excel文件 支持xls和xlsx 代码简介: sql_output_excel函数是用来导出excel文件的,其他两个函数是导出xls和xlsx格式的. 使用pymy ...

  9. python3通过qq邮箱发送邮件以及附件

    本文实例为大家分享了python3通过qq邮箱发送邮件以及附件的具体代码,供大家参考,具体内容如下 开启qq邮箱的smtp服务 代码: 在学习过程中有什么不懂得可以加我的 python学习qun,85 ...

  10. Python3 发送QQ邮箱(含附件)

    Python3 发送QQ邮箱(含附件) 准备工作: 1.用到的python包:smtplib和email 2.获取qq邮箱授权码:在qq邮箱的设置里面的账户下面,开启POP3/SMTP服务和IMAP/ ...

最新文章

  1. 微软发布.NET Core Tools 1.0版本
  2. Gym101128J
  3. 【剑指offer】面试题30:包含min函数的栈
  4. linux fcntl 设置阻塞,Linux fcntl函数设置阻塞与非阻塞
  5. 如何产生1-100之间的100个不重复的随机数
  6. .NET 3.5(11) - DLINQ(LINQ to SQL)之大数据量分页、延迟执行和日志记录
  7. 解决IIS占用CPU和内存大的问题
  8. mysql 更新并查询结果_数据库_基础知识_MySQL_UpdateSelect(根据查询出来的结果批量更新)...
  9. 判断两根线段是否相交
  10. Luogu3834 【模板】可持久化线段树 1(主席树)
  11. win10环境下matlab2017b编译运行c++文件步骤
  12. 韩昊20190912-3 词频统计
  13. java 网络 序列化_Java网络通信基础系列-Netty序列化
  14. Halcon例程分析2:颜色检测识别
  15. 流量不清零:为何让三运营商的垄断越走越紧
  16. Twilio Inc.(TWLO)2020年第三季度收益电话会议记录
  17. 开发一个基于 Android系统车载智能APP
  18. 实现系统滚动条换肤功能
  19. 【HEVC代码阅读】帧内预测
  20. 2021年中国国有企业经营现状分析:营业收入及利润总额均增加[图]

热门文章

  1. 工作例会关于“工作效率”的分享
  2. 解决浏览器打开就是被篡改的桔梗网界面
  3. mac拼音输入法下面不显示汉字
  4. 大行bya412和java513_转:我的折叠生活之大行bya412改装总结
  5. Android 画三角形shape
  6. java基础 -- Apache POI将PPT转换成图片
  7. 体温枪PCBA设计生产流程
  8. 【论文阅读】中医类药性分析:使用机器学习方法预测类药性
  9. HyperAttentionDTI: improving drug–protein interaction prediction by sequence-based deep learning wit
  10. 儿科常见疾病的中成药疗法