使用python制作一款文件粉碎工具
更新時間:2025年08月22日 09:32:37 作者:小木_.
這篇文章主要為大家詳細介紹了如何使用python制作一款文件粉碎工具,能夠有效粉碎密碼文件和機密Excel表格等,感興趣的小伙伴可以了解一下
文件粉碎工具:適用于粉碎密碼文件和機密的escel表格等等,主要作用就是防止 別人用數據恢復大師把你剛刪除的機密的文件恢復過來,造成密碼丟失等。
程序原理:修改內部數據,使用open函數 強制替換填充數據并保存,然后進行刪除。
基本無法恢復,除非某軟件有自動備份功能。
廢話不多說,看圖 上代碼




完整代碼:
"""
安裝 ttkbootstrap 模塊
pip install ttkbootstrap
安裝 windnd 模塊
pip install windnd
安裝 shutil 模塊
pip install shutilwhich
"""
import ttkbootstrap as ttk
from ttkbootstrap.constants import *
import os
import windnd
from threading import Thread
import shutil
# 實例化創(chuàng)建應用程序窗口
root = ttk.Window(
title="Shredding Documents", # 設置窗口的標題
themename="litera", # 設置主題
size=(612,288), # 窗口的大小
position=(612,288), # 窗口所在的位置
minsize=(612,288), # 窗口的最小寬高
maxsize=(612,288), # 窗口的最大寬高
resizable=None, # 設置窗口是否可以更改大小
alpha=1.0, # 設置窗口的透明度(0.0完全透明)
)
root.iconbitmap(f"picture.ico")
# 標簽
ttk.Label(root, text="將文件推拽到此窗口內↓↓↓ 提示:請不要放系統(tǒng)文件和盤符 【粉碎前需關閉文件或程序,否則會異?!?,bootstyle=DANGER).place(x=14,y=20)
ttk.Label(root, text="作者:小木_.\t郵箱:QHJ_WZ@163.com",bootstyle=SECONDARY).place(x=14,y=260)
# 文件夾數量展示
var_Display_volume = ttk.StringVar()
Display_volume = ttk.Label(root, textvariable=var_Display_volume).place(x=14, y=180)
var_Display_volume.set('文件數量:0\t文件夾數量:0\t總數據:0\n執(zhí)行成功:0\t異常文件:0')
# 線程檢測
var_Line = ttk.StringVar()
Line = ttk.Label(root, textvariable=var_Line).place(x=534, y=260)
var_Line.set('等待執(zhí)行...')
# 窗口展示內容
text = ttk.Text(root,width=84, heigh=6)
text.pack(padx=0,pady=50)
text.insert('insert','將想要粉碎的文件拖進此窗口內!??!') # 插入內容
text['state'] = 'disabled' # 【禁用】 disabled 可用 normal
# 文件 -- 主
files_A = []
# 文件夾
folder_A = []
# 臨時文件夾 -- 主
folder_B = []
# 異常文件
G = []
# 拖拽觸發(fā)DEF
def Dragoon(files):
global files_A,folder_A,folder_B,G
# 初始化文件
files_A = []
# 初始化文件夾
folder_A = []
# 初始化臨時文件夾
folder_B = []
# 初始化異常文件
G = []
text['state'] = 'normal' # 【可用】 禁用 disabled 可用 normal
text.delete("0.0", 'end') # 刪除全部內容
# 將拖拽的文件循環(huán)便利出來并解碼 存儲到列表內
for a in files:
a = a.decode('gbk') # 解碼
if os.path.isfile(a) == False: # 檢測是否是文件 是文件True 否則False
folder_A = folder_A + [a] # 將文件夾路徑存儲起來
else:
text.insert('insert', str(a).replace('\\','/')+"\n") # 打印出來文件路徑
files_A = files_A + [str(a).replace('\\','/')] # 存儲文件路徑
# 循環(huán)遍歷出文件夾內的所有文件和文件夾
for _a_ in folder_A:
for a in os.walk(str(_a_).replace('\\','/')): # 找出所有的文件夾內的文件和文件夾
# 文件夾
folder_B = [a[0].replace('\\', '/')] + folder_B # 存儲文件夾路徑 順序不可錯
for aa in a[2]: # 文件路徑
text.insert('insert', os.path.join(a[0], aa).replace('\\', '/') + "\n") # 將文件夾路徑和文件合并在一起 成為文件路徑
# 文件
files_A = files_A + [os.path.join(a[0], aa).replace('\\', '/')] # 存儲文件路徑
# 將保存的文件夾路徑遍歷打印出來
for a in folder_B:
text.insert('insert', a+'\n') # 文件夾路徑
# 文件數量和文件夾數量
var_Display_volume.set(f'文件數量:{len(files_A)}\t文件夾數量:{len(folder_B)}\t總數據:{len(files_A)+len(folder_B)}\n執(zhí)行成功:0\t異常文件:0')
text['state'] = 'disabled' # 【禁用】 禁用disabled 可用normal
# 刪除文件
def Delete_File(FILE):
global G
if os.path.isfile(FILE) == True: # 判斷是否存在文件
try:
W_file = open(FILE, 'w')
W_file.write('1')
W_file.close()
os.remove(FILE) # 刪除文件
text['state'] = 'normal' # 【可用】 禁用 disabled 可用 normal
text.insert('insert', '· 處理完成 >>' + FILE + '\n') # 插入內容
text.see(ttk.END) # 光標跟隨著插入的內容移動
text['state'] = 'disabled' # 【禁用】 disabled 可用 normal
except:
try:
os.remove(FILE) # 刪除文件
except:
G = G + ['【異常未處理】 >>'+FILE] # 異常文件
else:
G = G + ['【異常未處理】 >>'+FILE] # 異常文件
# 刪除文件夾
def Delete_folders(FILE):
global G
if os.path.isfile(FILE) == False: # 判斷是否存在文件
if os.path.exists(FILE) == True:
try:
os.rmdir(FILE) # 刪除一個空目錄
text['state'] = 'normal' # 【可用】 禁用 disabled 可用 normal
text.insert('insert', '· 處理完成 >>'+FILE+'\n') # 插入內容
text.see(ttk.END) # 光標跟隨著插入的內容移動
text['state'] = 'disabled' # 【禁用】 disabled 可用 normal
except:
G = G + ['【異常未處理】 >>'+FILE] # 異常文件
else:
G = G + ['【異常未處理】 >>'+FILE] # 異常文件
else:
G = G + ['【異常未處理】 >>'+FILE] # 異常文件
# def執(zhí)行 - 主
def DEFG():
def T():
if var_Line.get() == '執(zhí)行中...':
pass
else:
text['state'] = 'normal' # 【可用】 禁用 disabled 可用 normal
text.delete("0.0", 'end') # 刪除內容
text['state'] = 'disabled' # 【禁用】 disabled 可用 normal
var_Line.set('執(zhí)行中...')
# 刪除文件
for a in files_A:
# 刪除文件
Delete_File(a)
# 刪除文件夾
for a in folder_B:
Delete_folders(a) # 刪除文件夾
for A in G:
text['state'] = 'normal' # 【可用】 禁用 disabled 可用 normal
text.insert('insert', f'{A}\n') # 插入內容
text.see(ttk.END) # 光標跟隨著插入的內容移動
text['state'] = 'disabled' # 【禁用】 disabled 可用 normal
var_Display_volume.set(f'文件數量:{len(files_A)}\t文件夾數量:{len(folder_B)}\t總數據:{len(files_A)+len(folder_B)}\n執(zhí)行成功:{len(files_A)+len(folder_B)-len(G)}\t異常文件:{len(G)}')
var_Line.set('等待執(zhí)行...')
Thread(target=T).start()
# 按鈕
ttk.Button(text="一鍵粉碎",width=20,command=DEFG).pack()
# 拖拽模塊
windnd.hook_dropfiles(root, func=Dragoon)
if __name__ == '__main__':
root.mainloop()以上就是使用python制作一款文件粉碎工具的詳細內容,更多關于python文件粉碎的資料請關注腳本之家其它相關文章!
相關文章
文件上傳服務器-jupyter 中python解壓及壓縮方式
這篇文章主要介紹了文件上傳服務器-jupyter 中python解壓及壓縮方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
python3往mysql插入二進制圖片出現(xiàn)1064錯誤
這篇文章主要介紹了python3往mysql插入二進制圖片出現(xiàn)1064錯誤的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
從Pyspark UDF調用另一個自定義Python函數的方法步驟
PySpark,通常稱為Apache Spark的Python API,是為分布式數據處理而創(chuàng)建的,使用UDF,可以擴展和定制 PySpark 的功能以滿足某些需求,在本文中,我們將學習如何從Pyspark UDF調用另一個自定義Python函數,需要的朋友可以參考下2023-11-11
Python2和Python3中@abstractmethod使用方法
這篇文章主要介紹了Python2和Python3中@abstractmethod使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-02-02

