python中如何区分文件类型_python准确判断文件类型
python中如何区分⽂件类型_python准确判断⽂件类型梅兰芳妻子
判断⽂件类型在开发中⾮常常见的需求,怎样才能准确的判断⽂件类型呢?⾸先⼤家想到的是⽂件的后缀,但是⾮常遗憾的是这种⽅法是⾮常不靠谱的,因为⽂件的后缀是可以随意更改的,⽽⼤家都知道后缀在linux系统下是没有这个概念的,所以仅靠判断后缀⽆法准确判断⼀个⽂件的类型。还有第⼆种⽅法是判断⽂件的头,每种⽂件在⽂件的头中会标识这种⽂件的类型,下⾯我们来看看如何⽤python来判断⽂件的类型。
结婚需要什么证件python通过⽂件头判断⽂件类型的⽅法:#! /usr/bin/python
# pythontab提醒您注意中⽂编码问题,指定编码为utf-8
# -*- coding: utf-8 -*-
import struct
# ⽀持⽂件类型
# ⽤16进制字符串的⽬的是可以知道⽂件头是多少字节
# 各种⽂件头的长度不⼀样,少则2字符,长则8字符
def typeList():
return {
"FFD8FF": "JPEG",
"89504E47": "PNG"}
# 字节码转16进制字符串
def bytes2hex(bytes):
num = len(bytes)
hexstr = u""
for i in range(num):威尔史密斯的电影
t = u"%x" % bytes[i]
if len(t) % 2:
hexstr += u"0"
hexstr += t
中秋佳节祝福return hexstr.upper()
# 获取⽂件类型
def filetype(filename):
摩托赛车
binfile = open(filename, 'rb') # 必需⼆制字读取
tl = typeList()
ftype = 'unknown'
for hcode in tl.keys():
numOfBytes = len(hcode) / 2 # 需要读多少字节
binfile.seek(0) # 每次读取都要回到⽂件头,不然会⼀直往后读取
hbytes = struct.unpack_from("B"*numOfBytes, ad(numOfBytes)) # ⼀个 "B"表⽰⼀个字节
f_hcode = bytes2hex(hbytes)
if f_hcode == hcode:
ftype = tl[hcode]
break
binfile.close()
return ftype
if __name__ == '__main__':
print filetype('./test.jpg')
常见⽂件格式的⽂件头⽂件格式 ⽂件头(⼗六进制)
JPEG (jpg) FFD8FF
PNG (png) 89504E47
GIF (gif) 47494638
TIFF (tif) 49492A00
Windows Bitmap (bmp) 424D
CAD (dwg) 41433130
Adobe Photoshop (psd) 38425053
Rich Text Format (rtf) 7B5C727466
XML (xml) 3C3F786D6C
HTML (html) 68746D6C3E
Email [thorough only] (eml) 44656C69766572792D646174653A Outlook Express (dbx) CFAD12FEC5FD746F
Outlook (pst) 2142444E
MS Word/Excel (doc) D0CF11E0
MS Access (mdb) 5374616E64617264204A
>地板砖十大名牌

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。