前言:常在河边走,哪能不湿鞋。网上获取的各种文件后缀真真假假,甚至一不小心就会中招。因此,决定用python写一个能无视文件后缀的小程序,直接判断文件类型。
原理:使用python第三方python-magic库,通过文件头的MIME Type进行文件类型判断,不用纠结文件本身的后缀。
下载文件组成:提供源码和exe两种供大家使用,exe文件已在win7 x64/win10 x64下验证过,其他系统请自行验证。
源码:
[Python] 纯文本查看 复制代码
# encoding:utf-8
# Main function:获取当前文件的真实类型。采用MIME进行判断,可以无视后缀的篡改。
# How to Use:拖拽文件至本exe文件上 or 双击打开,执行完成后会在exe目录下生成results.txt文档。
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:
# 获取当前exe所在执行目录
if hasattr(sys, 'frozen'):
application_path = os.path.dirname(sys.executable)
else:
application_path = os.path.dirname(os.path.abspath(__file__))
#判断是否是拖拽模式.if yes,直接转入处理,if no,打开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
截图:
下载链接:
链接:https://pan.baidu.com/s/1Z1yWpgPWW8NPBuUwpe38qw
提取码:52pj