python正则将qq聊天记录转换为html
目录
- 一、需求
- 二、知识要点
- 三、全部代码
- 四、使用方法
- 五、转换效果
- 六、参考资料
一、需求
提取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文件路径
五、转换效果
六、参考资料
Python中re的match、search、findall、finditer区别 ↩︎
来源于"Stack Overflow"----how-do-i-re-search-or-re-match-on-a-whole-file-without-reading-it-all-into-memory ↩︎
tqdm参考文档 ↩︎
click参考文档 ↩︎
多进程copy文件 ↩︎
python正则将qq聊天记录转换为html相关推荐
- 用Python把QQ聊天记录文件转成WORD并排版
和女票在一起五年了,保留了几年的QQ聊天记录,偶然翻到,感觉很温暖,就想把这些文字做成一本属于我们的书,应该会很有纪念意义.然而qq备份的聊天记录是txt格式,网上找了半天也没有合适的排版工具,上百页 ...
- Python将我与王心凌的QQ聊天记录,生成词云(情人节的后续)
在这个情人节前夕,我把现任对象回收掉了,这段感情积攒了太多的失望,也给了我太多的伤害,所以我看到这个活动的第一反应是拒绝的.然而人生嘛,最重要的就是体验,沉浸在过去的回忆里没有意义,积极面对才能让自己 ...
- python分析qq聊天记录汉字频率
import re# -*- coding: utf-8 -*- with open('C:\\Users\\BIMK\\Desktop\\1.txt','r+',encoding='UTF-8') ...
- qq聊天记录词频查询 python实现
为了给后期聊天机器人提供大量的聊天词汇写了这个脚本,感兴趣的朋友可以看一下 下面是代码: #-*-coding:utf8-*- import re def getWordRate(name,path, ...
- R语言编程实现批量化处理非结构化的QQ聊天记录(优化版)
昨日天朗气清,惠风和畅,突然跟群友聊天,说到QQ群聊天记录的事,正好手边有时间,立刻导出QQ的群消息聊天记录,打算分析一下,然并卵--腾讯对QQ聊天记录不知道是按啥规则保存,反正就是标准的非格式化数据 ...
- Python正则简单实例分析
本文实例讲述了Python正则简单用法.分享给大家供大家参考,具体如下: 悄悄打入公司内部UED的一个Python爱好者小众群,前两天一位牛人发了条消息: 小的测试题: re.split('(\W ) ...
- 在Python中用WordCloud生成聊天记录热点词汇词云图
刚开学第一天,因为老师没在实验室,所以就没去.之前有看到过别人展示过热点词汇的那种图片,闲着也是闲着,所以就捣鼓了一下午,为了整理一下学的东西,下面就以QQ聊天记录为例子,生成热点词汇.具体的效果如下 ...
- 把QQ聊天记录插入数据库中
最近在做毕设,其中一个环节是分析qq聊天记录,在分析之前需要先把qq聊天记录导出,然后存入数据库中,qq聊天记录导出后是文本文档,导出方式: 1.登录qq后,点击任意一个好友,查看与他的聊天记录,点击 ...
- python正则检验_Python 检测生僻字
最近碰到一个需求,要求检测字段是否包含生僻字以及一些非法字符如 ~!@#$%^&*. 首先想到的就是利用 python 的正则表达式来匹配非法字符,然后找出非法记录.然而理想总是丰满的,现实却 ...
最新文章
- Linux系统性能分析: I/O栈 优化
- vs c# release断点调试
- android进度条课设报告,Android开发之进度条ProgressBar的示例代码
- 当集合a为空集时a的取值范围_高中数学必修一第一章集合分节练习和章末测试题含答案[1] 2...
- android daemon 程序,(转)Android App Daemon
- HTTP 相应头相关
- Android开机时间统计,android 开机时间检测
- 深入理解SpringBoot配置
- IT男几时而立(下)
- oracle xp安装详细步骤
- 【优化选址】基于matlab禁忌搜索算法求解基站选址优化问题【含Matlab源码 440期】
- 如何防止session过期
- 离散傅里叶变换(DFT)
- php实现ipv4转换ipv6
- 了解云桌面,看这一篇文章就够了
- MMORPG游戏的文案设计
- 中文分词软件包的使用
- 数据结构 (C++)笔记6 (有序列表 排序器)
- 25. 答疑 - SAP OData 框架处理 Metadata 元数据请求的实现细节,前后端组件部署在同一台物理服务器
- 图文:微博平台首席架构师杨卫华演讲