對於提供上傳的伺服器,需要對上傳的檔案進行過濾。
分享**如下
import struct
# 支援檔案型別
# 用16進製制字串的目的是可以知道檔案頭是多少位元組
# 各種檔案頭的長度不一樣,少半2字元,長則8字元
def typelist():
return
# 位元組碼轉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 = typelis程式設計客棧t()
ftype = 'unknown'
for hcode in tl.keys():
numofbytes = len(hcode) / 2 # 需要讀多少位元組
binfile.seek(0) # 每次讀取都要回到檔案頭,不然會一直往後讀取
hbytes = struct.unpack_from("b"*numofbytes, binfile.read(numofbytes)) # 乙個 "b"表示乙個位元組
f_hcode = bytes2hex(hbytes)
if f_hcode == hcode:
ftype = tl[hcode]
break
binfile.close()
return ftype
if __name__ == '__main__':
print filetype(your-file-path)
常見檔案格式的檔案頭
檔案格式 檔案頭(十六進製制)
png (png)8950程式設計客棧4e47
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 (xls.or.doc)d0cf11e0
ms access (mdb)5374616e64617264204a
本文標題: python通過檔案頭判斷檔案型別
本文位址: /jiaoben/python/133827.html
php通過檔案頭判斷格式的方法
fun程式設計客棧ction judgefile file,form if is array form else elseelse else 補充 小編在這裡推薦一款本站的php格式化美化的排版工具幫助大家在以後的php程式設計中進行 排版 php 格式化美化工具 另外,由於php屬於c語言風格,因...
Go語言 通過檔案流判斷檔案頭來識別檔案型別
系統中需要用到檔案上傳的功能,但是從系統安全的角度上來說需要判斷上傳檔案的格式,防止將病毒木馬等有害的檔案上傳到伺服器上。這個方法簡單容易,但是也是最容易被欺騙的方法,修改檔案的字尾名即可實現欺騙系統。這個是通過判斷檔案的mime型別進行判斷,我們在通過form表單上傳檔案時,在上傳的request...
Python 檔案頭注釋
encoding utf 8是注釋,但 python 看到這句話就知道了接下來應該用 utf 8 對該 py 檔案進行解碼了。如果直接採用 python file.py 的方式執行指令碼的話,有沒有 shebang 都無所謂,因為我們自己直接指定了該指令碼的直譯器,即 python。通常我們認為 u...