powershell数据库
㈠ Python加PowerShell删除指定QQ群的图片
不知道你们是不是和我一样,QQ加了不少的群,基本是加了就不看的。
有一些水群又水得厉害,收进群助手了,但没有屏蔽信息,不知不觉间,就堆了一堆的图片。
而QQ的删除聊天记录,就真的只是删除聊天记录,群里面图片还是会留在聊天记录的文件夹里面,这就很麻烦了,你又分不清哪个群的图片,把图片全删除了,又有那么几个群是想保留图片的。
刚好,腾讯最近出了个新的NT架构的QQ,我本来期待他能像微信一样按群来删除图片,结果还是不行。
搜索一番,找到两个项目,分别用来解密和解码QQ的数据库,然后发现能从数据库的群聊天信息拿到图片路径。
那就好办了,写了几个脚本来实现按群来删除图片。
如果你是出于:“想要清理不看的QQ群的群图片,并且希望能一直保持聊天记录比较“干净”。
那么,新版的NTQQ暂时不建议使用,因为目前只有旧版的QQ才能屏蔽接受群图片(看的时候可以手动点击加载)
QQ的相关信息,聊天记录的配置文件存放在:C:\Users\Public\Documents\Tencent\QQ\UserDataInfo.ini,同一台电脑下,所有用户使用同一个配置文件。
例如,当聊天记录存放在D:\Chats\Tencent Files时,UserDataInfo.ini 的内容为:QQ配置文件的相关信息可以看之前这篇: 免登录,用脚本提前修改微信、企业微信、QQ 的聊天路径 - tjxblog NT版本QQ暂时无法修改记录路径,它直接沿用了旧版QQ的路径设定。
QQ的图片文件结构,例如,当聊天记录存放在D:\Chats\Tencent Files,QQ账号是303xxx445 时,移动脚本要处理的是,聊天记录文件夹的 Image 下面的 Group Group2 两个文件夹。
新版NT架构QQ的相关信息,当你使用首次使用NTQQ的时候,会提示导入数据库。其实就是把旧的聊天记录文件夹\QQ账号\Msg3.0.db 导入到了新的聊天记录文件夹\QQ账号\nt_qq\nt_db\nt_msg.db。这期间会提示优化过程,新的数据库应该是和旧数据库不一样的。使用新的NTQQ的时候,会在原来的聊天记录路径下建立聊天记录路径\QQ账号\nt_qq\文件夹。接收到的图片及各类文件都是存放在新的路径下面。各种数据库:聊天记录路径\QQ账号\nt_qq\nt_db,图片之类的:聊天记录路径\QQ账号\nt_qq\nt_data。图片的存放结构和Windows版微信类似,会按年-月份的方式来区分。但是NTQQ目前仍然做不到像微信那样,按群来删除图片之类的文件。
操作流程,为了方便描述,假设下载完上面2个项目及sqlite-Tools后,都带文件夹解压到和我的脚本文件在同一级,为当前目录,文件结构如下:
我的项目地址:tjxwork/qq_db_export_group_image_path_and_move_or_delete: QQ数据库导出群图片路径并移动或者删除(github.com)
以及:你已经安装好Python,并且添加到系统环境变量。(安装时,勾选PATH 选项)Python 脚本运行时,提示缺少什么模块的时候,你要学会pip install xxxxxx PowerShel 已允许脚本运行 (请管理员权限打开 PowerShell 运行:Set-ExecutionPolicy -ExecutionPolicy RemoteSigned)在资源管理器的目录空白处,按着Shift + 鼠标右键,点击 在此处打开 PowerShell 窗口 就可以在当前目录直接打开PowerShell。
解密QQ数据库,先去你的聊天记录文件夹下面备份Msg3.0.db,先打开QQ,出现登陆窗口,先不要点击登陆,在当前目录打开PowerShell,运行解密脚本\qq-win-db-key-master\main.py 然后点击QQ的登陆按钮,耐心等待登陆,登陆成功后,脚本也随之运行结束。此时当前目录下出现一个解密完成的Msg3.0.db_0_xxxxxxxxxx.db 数据库文件。QQ可以退出了,后面用不到它了。
修复QQ数据库,打开PowerShell,运行SQLite-Tools,使用SQLite-Tools打开 Msg3.0.db_0_xxxxxxxxxx.db 检查是否出错。不出错就输入.quit退出。如提示出错的话,就继续处理,导出为temp.sql 临时的SQL文件。运行完成后,当前目录下出现一个temp.sql 文件。modify_temp_sql_last_line.py 脚本功能及默认参数:修改 temp.sql 文件的最后一行为 COMMIT;运行modify_temp_sql_last_line.py 脚本,运行完成,可以看到temp.sql 文件的修改时间发现变化。在当前目录打开PowerShell,运行SQLite-Tools,创建新数据库Msg.db 并导入 temp.sql,等待运行完成后,当前目录下出现一个修复完成的Msg.db 文件。
解码QQ数据库,使用文本编辑器打开\qq_msg_decode-main\index.py 文件,在大约534行处,修改为你的数据库路径,建议使用绝对路径。例如:在当前目录打开PowerShell,运行解码脚本\qq_msg_decode-main\index.py 此过程最为漫长,我10G左右的QQ数据库,跑了4小时20分钟。脚本跑完后,Msg.db 的体积会变大,因为会在表里面多加一个字段,用于存放解码完成后的信息。解码完成后的数据库结构如图。
导出群聊天记录的图片路径为CSV,regex_processing_img_path_to_csv.py 脚本功能及默认参数:读取当前目录下的Msg.db,导出各个群聊天记录中的图片路径为csv格式,存放到当前目录下的 QQ_Group_CSV文件夹下。运行regex_processing_img_path_to_csv.py 脚本,会将数据库内的群消息中的图片路径,以群分类,以数据库中的表名为命名,导出为csv文件。运行完成后,当前目录下出现一个QQ_Group_CSV 文件夹,其中包含若干数量的,格式类似group_123456789.csv 的CSV文件。注意:CSV文件名,其数字部分并不100%和QQ群的群号对应!
以聊天记录查询对应的群的数据库表名,由于在QQ数据库里面存储的群消息的表的名称,并不是绝对和QQ群的群号是一致对应的。再加之,有部分还能在QQ消息管理器中查看聊天记录的QQ群,已经被封禁,无法查看其群号。所以需要通过查询来确定,QQ群与数据库中的表的关系。query_chat_come_from_qq_group.py 脚本功能及默认参数:连接到当前目录下的Msg.db 数据库,使用聊天记录来查询确定其在数据库中对应的表名。运行query_chat_come_from_qq_group.py 脚本,复制消息管理器中的文本内容,粘贴到PowerShell窗口中查询,复制内容请尽量具有独特性,防止返回内容过多。查询效果如图。
定义移动文件脚本参数来移动图片,move_csv_img_path.ps1 的脚本功能:按脚本中定义黑白名单的群列表、运行模式、时间线,来移动对应群csv文件中记录的图片,按群来分类,移动到指定的目录下。move_csv_img_path.ps1 的脚本参数部分:请自行修改脚本中的参数为自己的实际路径。建议移动后的存放目录,设置为聊天记录同分一区下面,能极大地节省移动时间,同分区移动文件只是修改文件系统中的路径指向而已。move_csv_img_path.ps1 的脚本运行逻辑:运行move_csv_img_path.ps1 脚本,返回内容如图。
移动日志中出现大量错误的原因,由于存在表情包之类的复用图片,同一个图片路径,可能会在多个群CSV里面反复出现。从而导致移动脚本读取第1个群CSV正常移走图片后,移动脚本再读取到后续的群CSV文件中再出这条图片路径,脚本再次移动该图片路径时找不到图片,就会在日志中记录为失败。此部分内容可以看看视频版演示。
效果,我最后清掉了183G的图片,最多那个群35G……留下的4个群只有3.32G。