PC版QQ清理空间时保留指定群聊图片的方法
Puella_Magi_Nico
编辑于 2023年05月06日 17:58

前言


众所周知,QQ不提供删除指定群聊图片的功能(虽然可以删除聊天记录,但删除聊天记录不会删除图片)

而如果加入了许多大群又忘记关闭接收图片将导致QQ个人文件夹体积膨胀(比如我今天清理前QQ体积高达200GB,其中图片占据了160GB)

然而,尽管可以直接在目录下删除Group和Group2文件夹,但由于腾讯是将所有图片丢在一起存储,这导致我们以往如果希望保留某些群的图片,只能任由这坨屎山寄生在硬盘上。

不过,从今天起,这一切都将得到解决

操作方法


本教程思路基于知乎用户doandwait发表的https://zhuanlan.zhihu.com/p/374145462专栏 是以上专栏的详细+魔改版

软件需求: 火绒安全中心(火绒剑) Python

整体思路:在QQ中以网页导出聊天记录会连图片一起导出,此时通过火绒剑监测保存群图片的目录读取操作即可获取该群的所有图片,之后利用python脚本便可将这些图片复制到另一目录

脚本:

代码块
Python
自动换行
复制代码
import re
import shutil
import os
 
txt_path = r'xxxxx.txt'#改成自己导出的日志txt的路径,如在同一目录下只需输入文件名
target_path = "D:\\QQtmp\\"#改成目标临时文件夹路径,复制时记得\要手动多打一个变成\\
disk = 'D'#QQ所在的硬盘,如果在D盘则改为D
 
if not os.path.exists(target_path+"Group\\"):
    os.mkdir(target_path+"Group\\")
if not os.path.exists(target_path+"Group2\\"):
    os.mkdir(target_path+"Group2\\")
with open(txt_path, 'r', encoding='gb2312') as f:
    for line in f:
        if "FILE_read," in line:
            matchObj = re.search(r'{0}:.+?(?=,)'.format(disk), line)
            if matchObj:
                pic_path=matchObj.group()
                print(pic_path)
                dir1 = pic_path.split('\\')[-3]
                dir2 = pic_path.split('\\')[-2]
                filename = pic_path.split('\\')[-1]
                if 'Group2' in pic_path:
                    if not os.path.exists(target_path+"Group2\\"+dir1):
                        os.mkdir(target_path+"Group2\\"+dir1)
                    if not os.path.exists(target_path+"Group2\\"+dir1+"\\"+dir2):
                        os.mkdir(target_path+"Group2\\"+dir1+"\\"+dir2)
                    try:
                        shutil.copyfile(pic_path, target_path+"Group2\\"+dir1+"\\"+dir2+"\\"+filename)
                    except:
                        continue
                else:
                    if not os.path.exists(target_path+"Group\\"+dir1):
                        os.mkdir(target_path+"Group\\"+dir1)
                    if not os.path.exists(target_path+"Group\\"+dir1+"\\"+dir2):
                        os.mkdir(target_path+"Group\\"+dir1+"\\"+dir2)
                    try:
                        shutil.copyfile(pic_path, target_path+"Group\\"+dir1+"\\"+dir2+"\\"+filename)
                    except:
                        continue
复制成功

(如果不知道怎么使用,复制所有代码到一个txt文件中,将后缀改为.py即可) (需要编辑时,右键然后选择编辑,请留意引号「'」和「&#​34;」)

这个脚本是基于doandwait在知乎发表的脚本魔改而成,原脚本是为了将某群聊的图片删除而没有保留原有目录结构,魔改后可重新丢回Image目录下使用

操作步骤: 1. 打开火绒,在安全工具里找到并启动火绒剑 2.切换到火绒剑的左上角的「监测」(Monitor)菜单栏,在下方的「过滤」(Filter)中点击「路径过滤」(Path Filters) (因为系统是英文所以这里就将就着用英文版截图了,翻译可能不同不过大概意思对就行)

3.点击右上的「添加」(Add),会增加一行,然后在「值」(Value)的框中粘贴QQ的图片保存路径,点击确认,然后开始监听(点击上图中Start位置的按钮) (例如D:\Program Files (x86)\QQ\QQData\xxxxxxx\Image,其中xxxx为你的QQ号)

*从此步骤开始,请不要使用QQ(不要打开任何群/好友的聊天页面)* 4. 开启PC版QQ的消息管理器(左下角三个横里找),在群聊中找到希望保存消息的群,右键导出消息记录,文件格式选择网页格式,随便保存到一个地方

这时会发现火绒剑中逐渐出现一些QQ的读取操作,等待导出完毕 5. 导出消息记录完毕后,在火绒剑中选择「导出」(Export),导出操作日志

为文件随便起一个名,保存到桌面(或者其他你知道在哪的地方) *如果还有其他群要保存,点击上图中的「清除」(Clear),并重复步骤4及5*

6.把上面的python脚本保存到桌面(或者刚才你保存导出日志的目录下),在另一个地方新建一个文件夹用于临时保存复制来的图片,按照注释修改txt_path, target_path和disk的值 如果有多个群,则运行多次脚本,每次将txt_path改为其中一个群对应的txt操作日志的文件名

7.确认临时文件夹中保存了你要保留的图片后,退出QQ,删除QQ个人文件夹\Image 下的Group和Group2文件夹(如果文件夹较大,推荐使用指令删除)。然后将临时文件夹中的两个同名文件剪切到Image下,清理完成。

可以打开QQ查看效果

这是我清理后的大小