Python編寫(xiě)判斷真實(shí)文件類(lèi)型工具
1.簡(jiǎn)介
常在河邊走,哪能不濕鞋。網(wǎng)上獲取的各種文件后綴真真假假,甚至一不小心就會(huì)中招。因此,決定用python寫(xiě)一個(gè)能無(wú)視文件后綴的小程序,直接判斷文件類(lèi)型。該工具原理使用python第三方python-magic庫(kù),通過(guò)文件頭的MIME Type進(jìn)行文件類(lèi)型判斷,不用糾結(jié)文件本身的后綴。
下載文件提供源碼和exe兩種供大家使用,exe文件已在win7 x64/win10 x64下驗(yàn)證過(guò),其他系統(tǒng)請(qǐng)自行驗(yàn)證。喜歡的話(huà)可以點(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í)類(lèi)型。采用MIME進(jìn)行判斷,可以無(wú)視后綴的篡改。
How to Use:拖拽文件至本exe文件上 or 雙擊打開(kāi),執(zhí)行完成后會(huì)在exe目錄下生成results.txt文檔。
2.運(yùn)行效果
示例圖三為三張jpg截圖,有一張篡改了后綴,一張刪除了后綴,一張維持原樣。均能識(shí)別出來(lái)文件類(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í)文件類(lèi)型工具的文章就介紹到這了,更多相關(guān)Python文件類(lèi)型判斷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python?數(shù)據(jù)可視化實(shí)現(xiàn)5種炫酷的動(dòng)態(tài)圖
數(shù)據(jù)可以幫助我們描述這個(gè)世界、闡釋自己的想法和展示自己的成果,但如果只有單調(diào)乏味的文本和數(shù)字,我們卻往往能難抓住觀(guān)眾的眼球。而很多時(shí)候,一張漂亮的可視化圖表就足以勝過(guò)千言萬(wàn)語(yǔ)2022-01-01Python實(shí)現(xiàn)的括號(hào)匹配判斷功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)的括號(hào)匹配判斷功能,涉及Python棧與列表的存儲(chǔ)、遍歷、判斷等相關(guān)操作技巧,需要的朋友可以參考下2018-08-08Python實(shí)現(xiàn)高斯函數(shù)的三維顯示方法
今天小編就為大家分享一篇Python實(shí)現(xiàn)高斯函數(shù)的三維顯示方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12python定時(shí)采集攝像頭圖像上傳ftp服務(wù)器功能實(shí)現(xiàn)
本文程序?qū)崿F(xiàn)python定時(shí)采集攝像頭圖像上傳ftp服務(wù)器功能,大家參考使用吧2013-12-12Python編程二分法實(shí)現(xiàn)冒泡算法+快速排序代碼示例
這篇文章主要介紹了Python編程二分法實(shí)現(xiàn)冒泡算法+快速排序代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Python 70行代碼實(shí)現(xiàn)簡(jiǎn)單算式計(jì)算器解析
這篇文章主要介紹了Python 70行代碼實(shí)現(xiàn)簡(jiǎn)單算式計(jì)算器解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Python chardet庫(kù)識(shí)別編碼原理解析
這篇文章主要介紹了python chardet庫(kù)識(shí)別編碼原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02django之從html頁(yè)面表單獲取輸入的數(shù)據(jù)實(shí)例
這篇文章主要介紹了django之從html頁(yè)面表單獲取輸入的數(shù)據(jù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03Django中信號(hào)signals的簡(jiǎn)單使用方法
這篇文章主要給大家介紹了關(guān)于Django中信號(hào)signals的簡(jiǎn)單使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07