Python編寫(xiě)判斷真實(shí)文件類型工具
1.簡(jiǎn)介
常在河邊走,哪能不濕鞋。網(wǎng)上獲取的各種文件后綴真真假假,甚至一不小心就會(huì)中招。因此,決定用python寫(xiě)一個(gè)能無(wú)視文件后綴的小程序,直接判斷文件類型。該工具原理使用python第三方python-magic庫(kù),通過(guò)文件頭的MIME Type進(jìn)行文件類型判斷,不用糾結(jié)文件本身的后綴。
下載文件提供源碼和exe兩種供大家使用,exe文件已在win7 x64/win10 x64下驗(yàn)證過(guò),其他系統(tǒng)請(qǐng)自行驗(yàn)證。喜歡的話可以點(diǎn)個(gè)關(guān)注哦!
注:
python中運(yùn)行報(bào)錯(cuò)可能是未安裝python-magic導(dǎo)致的,需要安裝以下第三方庫(kù)文件:
pip install python-magic pip install python-magic-bin
使用說(shuō)明:
Main function:獲取當(dāng)前文件的真實(shí)類型。采用MIME進(jìn)行判斷,可以無(wú)視后綴的篡改。
How to Use:拖拽文件至本exe文件上 or 雙擊打開(kāi),執(zhí)行完成后會(huì)在exe目錄下生成results.txt文檔。
2.運(yùn)行效果


示例圖三為三張jpg截圖,有一張篡改了后綴,一張刪除了后綴,一張維持原樣。均能識(shí)別出來(lái)文件類型。

3.相關(guān)源碼
import os
import tkinter
import magic
import sys
from tkinter import filedialog
def process(fnames,dirpath):
os.chdir(dirpath)
result = "results.txt"
f = open(result, "w",encoding="utf-8")
for fname in fnames:
if os.path.exists(fname):
if os.path.isfile(fname):
content = "name:{}\nType:{}".format(os.path.basename(fname),
magic.from_buffer(open(fname, "rb").read(2048), mime=True))
print(content)
print("*" * 50)
f.write(content + "\n")
f.write("*" * 50 + "\n")
else:
print(f"{fname} is not a file")
else:
print(f"{fname} not found")
f.close()
os.startfile(result)
if __name__ == "__main__":
try:
# 獲取當(dāng)前exe所在執(zhí)行目錄
if hasattr(sys, 'frozen'):
application_path = os.path.dirname(sys.executable)
else:
application_path = os.path.dirname(os.path.abspath(__file__))
#判斷是否是拖拽模式.if yes,直接轉(zhuǎn)入處理,if no,打開(kāi)UI界面
fnames=sys.argv[1:]
if fnames:
process(fnames,application_path)
else:
root = tkinter.Tk()
root.withdraw()
fnames = filedialog.askopenfilenames(title='File Selection', filetypes=[ ('All Files', '*') ])
if fnames:
process(fnames, application_path)
except:
pass
到此這篇關(guān)于Python編寫(xiě)判斷真實(shí)文件類型工具的文章就介紹到這了,更多相關(guān)Python文件類型判斷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python類的動(dòng)態(tài)修改的實(shí)例方法
這篇文章主要介紹了Python類的動(dòng)態(tài)修改的實(shí)例方法的相關(guān)資料,需要的朋友可以參考下2017-03-03
Python編寫(xiě)郵件自動(dòng)發(fā)送工具的完整指南
自動(dòng)化郵件發(fā)送是一個(gè)非常實(shí)用的功能,無(wú)論是系統(tǒng)通知,營(yíng)銷郵件,還是日常工作報(bào)告,下面我們來(lái)看看Python如何使用smtplib實(shí)現(xiàn)郵件自動(dòng)發(fā)送工具吧2025-06-06
Python爬蟲(chóng)爬取Bilibili彈幕過(guò)程解析
這篇文章主要介紹了Python爬蟲(chóng)爬取Bilibili彈幕過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
Python程序中引用環(huán)境變量的方法實(shí)現(xiàn)
本文主要介紹了Python程序中引用環(huán)境變量的方法實(shí)現(xiàn),通過(guò)配置環(huán)境變量并在代碼中引用,可以避免將敏感信息直接寫(xiě)入代碼中,感興趣的可以了解一下2024-12-12
Python3 pandas.concat的用法說(shuō)明
這篇文章主要介紹了Python3 pandas.concat的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
深入了解Python中Pytest Markers的使用方法
從這篇開(kāi)始,逐一解決fixture是啥,mark是啥,參數(shù)request是啥,鉤子函數(shù)是啥,parametrize參數(shù)化是啥,這些問(wèn)題,本片先介紹一下mark是啥,以及如何使用2023-09-09
TensorFlow固化模型的實(shí)現(xiàn)操作
這篇文章主要介紹了TensorFlow固化模型的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05

