python通過檔案頭判斷檔案型別

2022-10-04 22:27:52 字數 1671 閱讀 3092

對於提供上傳的伺服器,需要對上傳的檔案進行過濾。

分享**如下

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...