你是否遇到过这样的场景,电脑使用了较长的一段时间后,微信占用了比较大的存储空间,
导致电脑的存储空间不够用,想要先把文件备份或者删除掉,这是我们会发现视频和文件是可以直接备份的,但是图片被微信加密成了是看不懂的dat文件,不删除,电脑空间不够,想删除,又不知道删除的是哪个文件?
这时很多非IT专业的小伙伴,可能就只能眼睁睁的看着电脑的空间越来越少,却无计可施!
那么是否有办法来将dat文件转换成普通的图片格式呢,例如:jpg格式。
下面就简单的介绍一下使用Python进行dat转换为jpg的方法,写的比较简单没有增加复杂逻辑(文末,会放封装好的exe工具)
代码主要会分为两部分:
1、使用tkinter选择文件夹路径和文件要保存的路径
2、将dat文件转换为jpg的简单实现逻辑
完整代码如下:
import tkinter as tk
from tkinter import *
from tkinter import ttk, messagebox
from tkinter import filedialog
import os
# 创建Tkinter帧的实例
app = tk.Tk()
# 定义几何
app.geometry("950x350")
def get_folder():
path = filedialog.askdirectory()
str_folder_obj.set(path)
def save_folder_path():
path = filedialog.askdirectory()
str_save_obj.set(path)
def DatToImage():
folder_path = str_folder_obj.get()
save_path = str_save_obj.get()
if save_path == "" or folder_path == "":
messagebox.showinfo("Alert", "文件地址和保存地址都不能为空")
else:
openDatFile(folder_path, save_path)
messagebox.showinfo("Alert", "转码操作完成")
app.destroy()
# 根据文件夹地址和保存的地址处理dat文件
def openDatFile(folder_path, savepth):
dat_file_list = os.listdir(folder_path)
if len(dat_file_list) > 0:
# print(dat_file_list) # 打印dat文件列表
for fn in dat_file_list:
temp_path = os.path.join(folder_path, fn)
if os.path.isfile(temp_path):
# print(f'导入的文件路径是{temp_path}') # 打印出要处理的文件,这里比较简单,后期可以增加判断是否为dat格式
fn = fn[:-4]
imageDecode(temp_path, savepth, fn)
else:
pass
else: # 未查询到文件时提醒
messagebox.showinfo("Alert", "此文件夹地址没有查到文件信息")
def imageDecode(folder_path, outpath, fn):
dat_read = open(folder_path, "rb")
xo = Format(folder_path)
out_file = outpath + '\\' + fn + ".jpg"
png_write = open(out_file, "wb")
dat_read.seek(0)
for now in dat_read:
for nowByte in now:
newByte = nowByte ^ xo
png_write.write(bytes([newByte]))
dat_read.close()
png_write.close()
def Format(f):
dat_r = open(f, "rb")
try:
a = [(0x89, 0x50, 0x4e), (0x47, 0x49, 0x46), (0xff, 0xd8, 0xff)]
for now in dat_r:
for xor in a:
i = 0
res = []
nowg = now[:3]
for nowByte in nowg:
res.append(nowByte ^ xor[i])
i += 1
if res[0] == res[1] == res[2]:
return res[0]
except:
pass
finally:
dat_r.close()
# 创建一个标签和一个按钮以打开对话框
Label(app, text="微信Dat转图片工具", font=('Aerial 18 bold')).pack(pady=20)
str_folder_obj = StringVar()
str_folder_obj.set('文件位置:')
Label(app, textvariable=str_folder_obj, fg="blue", bg="yellow", wraplength=750).place(x=150, y=50, width=800, height=50)
folder_button = ttk.Button(app, text="选择Dat文件夹", command=get_folder)
folder_button.place(x=50, y=50, width=100, height=50)
str_save_obj = StringVar()
str_save_obj.set('文件位置:')
Label(app, textvariable=str_save_obj, fg="blue", bg="yellow", wraplength=750).place(x=150, y=150, width=800, height=50)
save_button = ttk.Button(app, text="选择保存位置", command=save_folder_path)
save_button.place(x=50, y=150, width=100, height=50)
button = ttk.Button(app, text="转换图片", command=DatToImage)
button.place(x=450, y=300)
app.mainloop()
运行效果界面如下:
转换后的效果如下:
工具下载:
链接: https://pan.baidu.com/s/15YcI09jgustzug59jzt3kg
提取码: z8gm