# 支援檔案型別
# 用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') # 必需二制字讀取
bins = binfile.read(20) # 提取20個字元
binfile.close() # 關閉檔案流
bins = bytes2hex(bins) # 轉碼
bins = bins.lower() # 小寫
print(bins)
tl = typelist() # 檔案型別
ftype = 'unknown'
for hcode in tl.keys():
lens = len(hcode) # 需要的長度
if bins[0:lens] == hcode:
ftype = tl[hcode]
break
if ftype == 'unknown': # 全碼未找到,優化處理,碼表取5位驗證
bins = bins[0:5]
for hcode in tl.keys():
if len(hcode) > 5 and bins == hcode[0:5]:
ftype = tl[hcode]
break
return ftype
# 檔案掃瞄,如果是目錄,就將遍歷檔案,是檔案就判斷檔案型別
def filescanner(path):
if type(path) != type('a'): # 判斷是否為字串
print('抱歉,你輸入的不是乙個字串路徑!')
elif path.strip() == '': # 將兩頭的空格移除
print('輸入的路徑為空!')
elif not os.path.exists(path):
print('輸入的路徑不存在!')
elif os.path.isfile(path):
if path.rfind('.') > 0:
print('檔名:', os.path.split(path)[1])
else:
print('檔名中沒有找到格式')
path = filetype(path)
print('解析檔案判斷格式:' + path)
elif os.path.isdir(path):
print('輸入的路徑指向的是目錄,開始遍歷檔案')
for p, d, fs in os.walk(path):
print(os.path.split(p))
for n in fs:
n = n.split('.')
print('\t' + n[0] + '\t' + n[1])
if __name__ == '__main__':
path = input('請輸入要掃瞄的資料夾路徑:')
filescanner(path)
判斷檔案型別
判斷檔案型別 檔案的真正型別,不是根據副檔名判斷 通過檔案頭來判斷 檔案型別列舉引數 如下 using system using system.collections.generic using system.linq using system.text namespace servicecontr...
python通過檔案頭判斷檔案型別
對於提供上傳的伺服器,需要對上傳的檔案進行過濾。分享 如下 import struct 支援檔案型別 用16進製制字串的目的是可以知道檔案頭是多少位元組 各種檔案頭的長度不一樣,少半2字元,長則8字元 def typelist return 位元組碼轉16進製制字串 def bytes2hex by...
PHP 判斷檔案型別
參考 黑夜路人 一般我們都是按照副檔名來判斷檔案型別,但是這個很不靠譜,輕易就通過修改副檔名來躲避了,一般必須要讀取檔案資訊來識別。foreach files as file 注 檔名擴充套件 linux不使用檔名擴充套件來識別檔案的型別。相反,linux根據檔案的頭內容來識別其型別。為了提高人類可...