目录

  • 一、需求
  • 二、知识要点
  • 三、全部代码
  • 四、使用方法
  • 五、转换效果
  • 六、参考资料

一、需求

提取qq聊天记录中的所有图片并保存在指定的文件夹,并将聊天记录转换为html。

二、知识要点

  • 大文件的流式匹配。re1、mmap2
  • 命令行进度条。tqdm3
  • 构建简单的命令行工具。click4
  • python多进程异步IO。multiprocessing.apply_async()5

三、全部代码

import re
import os
import sys
import mmap
import base64
import  multiprocessing as m
import click
from tqdm import tqdmdef  get_images(mhtFilepath):with open(mhtFilepath,'r+') as f:   data = mmap.mmap(f.fileno(), 0) #内存映射,防止文件过大,内存溢出pattern=re.compile(rb'Content-Type:image/(.*?)\r\nContent-Transfer-Encoding.*?\r\nContent-Location:{(.*?)}.dat\r\n\r\n(.*?)\r\n\r\n',re.DOTALL) #正则匹配图片后缀名、base64编码的图片数据、文件IDreturn pattern.finditer(data)   #finditer返回迭代对象,findall返回list(内存占用太大)def write_to_image(imgOutputpath,strFileName,strContent,strSuffix):with open(imgOutputpath + "/" + strFileName + "." + strSuffix,'wb') as f:f.write(base64.b64decode(strContent))@click.command()
@click.argument('mht_filename', type=click.Path(exists=True))
@click.option('--image_output_path','-o','image_output_path', prompt=True,help='image output path')
def get_images_from_mht(mht_filename,image_output_path):'''从mht文件中提取图片'''if not os.path.exists(image_output_path):click.echo('{}路径不存在'.format(image_output_path))code=input('是否创建文件?(Y/N)')if code.strip().lower()=='y':try:os.makedirs(image_output_path)except Exception as e:click.echo('无法创建目录',e)sys.exit(0)else:sys.exit(0)else:cwd=os.getcwd()try:os.makedirs(cwd+'/images')except Exception as e:click.echo('无法创建目录',e)sys.exit(0)click.echo('正在从{}提取图片,请稍后...'.format(click.format_filename(mht_filename)))pool = m.Pool(processes=m.cpu_count())  #创建进程池d = get_images(mht_filename)for item in tqdm(d,unit='张'):suffix = item.group(1).decode('utf-8')filename = item.group(2).decode('utf-8')content = item.group(3).decode('utf-8')pool.apply_async(write_to_image, (image_output_path,filename,content,suffix,)) #异步io写入文件,节省时间pool.close()pool.join()click.echo('提取完成,图片保存在{}'.format(click.format_filename(image_output_path)))if __name__=='__main__':get_images_from_mht()

四、使用方法

第三步代码保存到getImgsFromMht.py,在cmd或powershell中执行python getImgsFromMht.py --help
获取图片:python getImgsFromMht.py -d 图片保存路径 mht文件路径

五、转换效果

六、参考资料


  1. Python中re的match、search、findall、finditer区别 ↩︎

  2. 来源于"Stack Overflow"----how-do-i-re-search-or-re-match-on-a-whole-file-without-reading-it-all-into-memory ↩︎

  3. tqdm参考文档 ↩︎

  4. click参考文档 ↩︎

  5. 多进程copy文件 ↩︎

python正则将qq聊天记录转换为html相关推荐

  1. 用Python把QQ聊天记录文件转成WORD并排版

    和女票在一起五年了,保留了几年的QQ聊天记录,偶然翻到,感觉很温暖,就想把这些文字做成一本属于我们的书,应该会很有纪念意义.然而qq备份的聊天记录是txt格式,网上找了半天也没有合适的排版工具,上百页 ...

  2. Python将我与王心凌的QQ聊天记录,生成词云(情人节的后续)

    在这个情人节前夕,我把现任对象回收掉了,这段感情积攒了太多的失望,也给了我太多的伤害,所以我看到这个活动的第一反应是拒绝的.然而人生嘛,最重要的就是体验,沉浸在过去的回忆里没有意义,积极面对才能让自己 ...

  3. python分析qq聊天记录汉字频率

    import re# -*- coding: utf-8 -*- with open('C:\\Users\\BIMK\\Desktop\\1.txt','r+',encoding='UTF-8') ...

  4. qq聊天记录词频查询 python实现

    为了给后期聊天机器人提供大量的聊天词汇写了这个脚本,感兴趣的朋友可以看一下 下面是代码: #-*-coding:utf8-*- import re def getWordRate(name,path, ...

  5. R语言编程实现批量化处理非结构化的QQ聊天记录(优化版)

    昨日天朗气清,惠风和畅,突然跟群友聊天,说到QQ群聊天记录的事,正好手边有时间,立刻导出QQ的群消息聊天记录,打算分析一下,然并卵--腾讯对QQ聊天记录不知道是按啥规则保存,反正就是标准的非格式化数据 ...

  6. Python正则简单实例分析

    本文实例讲述了Python正则简单用法.分享给大家供大家参考,具体如下: 悄悄打入公司内部UED的一个Python爱好者小众群,前两天一位牛人发了条消息: 小的测试题: re.split('(\W ) ...

  7. 在Python中用WordCloud生成聊天记录热点词汇词云图

    刚开学第一天,因为老师没在实验室,所以就没去.之前有看到过别人展示过热点词汇的那种图片,闲着也是闲着,所以就捣鼓了一下午,为了整理一下学的东西,下面就以QQ聊天记录为例子,生成热点词汇.具体的效果如下 ...

  8. 把QQ聊天记录插入数据库中

    最近在做毕设,其中一个环节是分析qq聊天记录,在分析之前需要先把qq聊天记录导出,然后存入数据库中,qq聊天记录导出后是文本文档,导出方式: 1.登录qq后,点击任意一个好友,查看与他的聊天记录,点击 ...

  9. python正则检验_Python 检测生僻字

    最近碰到一个需求,要求检测字段是否包含生僻字以及一些非法字符如 ~!@#$%^&*. 首先想到的就是利用 python 的正则表达式来匹配非法字符,然后找出非法记录.然而理想总是丰满的,现实却 ...

最新文章

  1. Linux系统性能分析: I/O栈 优化
  2. vs c# release断点调试
  3. android进度条课设报告,Android开发之进度条ProgressBar的示例代码
  4. 当集合a为空集时a的取值范围_高中数学必修一第一章集合分节练习和章末测试题含答案[1] 2...
  5. android daemon 程序,(转)Android App Daemon
  6. HTTP 相应头相关
  7. Android开机时间统计,android 开机时间检测
  8. 深入理解SpringBoot配置
  9. IT男几时而立(下)
  10. oracle xp安装详细步骤
  11. 【优化选址】基于matlab禁忌搜索算法求解基站选址优化问题【含Matlab源码 440期】
  12. 如何防止session过期
  13. 离散傅里叶变换(DFT)
  14. php实现ipv4转换ipv6
  15. 了解云桌面,看这一篇文章就够了
  16. MMORPG游戏的文案设计
  17. 中文分词软件包的使用
  18. 数据结构 (C++)笔记6 (有序列表 排序器)
  19. 25. 答疑 - SAP OData 框架处理 Metadata 元数据请求的实现细节,前后端组件部署在同一台物理服务器
  20. 图文:微博平台首席架构师杨卫华演讲

热门文章

  1. 推荐一个快速获取时间的插件 Moment.js
  2. 分割字符串(每个子串的ASCII码值的和均为水仙花数)
  3. 诚邀您体验人工智能AI
  4. 13、微信小程序:上传图片到服务器
  5. ArcMap10.8 点云数据处理
  6. matlab全下标取出元素8,matlab2010实验1参考答案
  7. 往mysql批量插入datetime
  8. 配置mysql环境变量之后,在命令行输入mysql命令无效的解决方法
  9. 搭建模拟搭建Hadoop完全分布式环境(三台服务器)详解
  10. 华三NS228交换机虚拟局域网划分方法