无码人妻A片一区二区三区_18禁裸乳无遮挡啪啪无码免费_91精品亚?影视在线?看_人人妻人人爽人人澡AV_国产精品人妻一区二区三区四区_午夜免费影视

中培偉業(yè)IT資訊頻道
您現(xiàn)在的位置:首頁(yè) > IT資訊 > 精選文章 > 使用Python確定文件格式

使用Python確定文件格式

2020-09-29 11:21:30 | 來(lái)源:中培企業(yè)IT培訓(xùn)網(wǎng)

很多人都遇見(jiàn)過(guò)這樣的問(wèn)題,存儲(chǔ)卡開(kāi)始將所有文件移至LOST.DIR文件夾,沒(méi)有任何擴(kuò)展名。長(zhǎng)期以來(lái),這里積累了500多種不同類型的文件:圖片,視頻,音頻,文檔。不可能單獨(dú)理解文件的格式,因此我開(kāi)始尋找一種以編程方式解決此問(wèn)題的方法。下面我們就來(lái)介紹一下如何使用Python確定文件格式的方法信息,想知道的請(qǐng)繼續(xù)往下看。

  尋找決定

我不想以Web服務(wù)或程序的形式使用現(xiàn)成的解決方案,因此有一種想法來(lái)編寫一個(gè)控制臺(tái)實(shí)用程序,該實(shí)用程序?qū)⒈闅v所有文件并自動(dòng)安裝擴(kuò)展。選擇Python編寫實(shí)用程序。出于以下幾個(gè)原因,搜索合適的模塊和庫(kù)沒(méi)有帶來(lái)結(jié)果:

· 缺乏開(kāi)發(fā)商的支持

· 功能過(guò)多

· 缺乏對(duì)Python新版本的支持

· 代碼過(guò)于復(fù)雜

在許多庫(kù)中,python-magic非常流行。它是libmagic庫(kù)的包裝器。但是,如果沒(méi)有用于Unix庫(kù)的DLL,就無(wú)法在Windows下使用python-magic。因此,此選項(xiàng)還不夠好。

  解決問(wèn)題

從以上內(nèi)容出發(fā),我決定不使用第三方庫(kù)和模塊,并在沒(méi)有它們的情況下解決問(wèn)題。在簡(jiǎn)短搜索有關(guān)如何執(zhí)行此任務(wù)的信息之后,唯一正確的方法是通過(guò)文件簽名(也稱為“幻數(shù)”)確定格式。

文件簽名是一組字節(jié),提供了文件格式的定義。簽名具有以下十六進(jìn)制形式:

50 4D 4F 43 43 4D 4F 43

幸運(yùn)的是,Internet上有兩個(gè)很好的站點(diǎn),帶有許多不同格式的簽名。目標(biāo)是最常見(jiàn)的格式。

事實(shí)證明,某些簽名適用于不同的文件格式,例如Microsoft Office文件的簽名。基于此,在某些情況下,有必要返回合適的文件擴(kuò)展名列表。

print(get("D:\some_ms_office_document")) # prints ['doc', 'ppt', 'xls']

同樣,簽名通常比3GP多媒體容器之類的文件開(kāi)頭偏移一點(diǎn)。

  1.編制數(shù)據(jù)清單

作為數(shù)據(jù)列表,我決定使用帶有“數(shù)據(jù)”對(duì)象的JSON文件,其值將是以下形式的對(duì)象數(shù)組:

{"format": "jpg", "offset": 0, "signature": ["FF D8 FF E0", "FF D8 FF E1", "FF D8 FF E2", "FF D8 FF E8"]}

哪里:

· 格式-文件格式;

· offset —簽名從文件開(kāi)頭的偏移量;

· 簽名—用于指定文件格式的適當(dāng)簽名的數(shù)組。

  2.編寫實(shí)用程序

  導(dǎo)入必要的模塊:

import os

import json

  讀取數(shù)據(jù)列表:

abspath = os.path.abspath(os.path.dirname(__file__))

data = json.loads(open(os.path.join(abspath, "data.json"), "r", encoding="utf-8").read())["data"]

很好,數(shù)據(jù)列表已加載。現(xiàn)在,我們將文件讀取為字節(jié)數(shù)組。我們只讀取前32個(gè)字節(jié),因?yàn)榇_定通用格式不需要更多,并且完全讀取大文件將花費(fèi)很長(zhǎng)時(shí)間。

file = open("path_to_the_file", "rb").read(32)

如果打印“文件”變量,將看到類似以下內(nèi)容:

x90x00x03x00x00x00x04

現(xiàn)在必須將字節(jié)轉(zhuǎn)換為十六進(jìn)制系統(tǒng):

hex_bytes = " ".join(['{:02X}'.format(byte) for byte in file])

接下來(lái),我們創(chuàng)建一個(gè)列表,在其中添加適當(dāng)?shù)母袷剑?/p>

out = []

現(xiàn)在,我們創(chuàng)建一個(gè)結(jié)構(gòu),該結(jié)構(gòu)將循環(huán)確定文件格式:

for element in data:

for signature in element["signature"]:

offset = element["offset"]*2+element["offset"]

if signature == hex_bytes[offset:len(signature)+offset].upper():

out.append(element["format"])

  關(guān)于此字符串:

offset = element["offset"]*2+element["offset"]

由于我們的字節(jié)用字符串表示,兩個(gè)符號(hào)表示一個(gè)字節(jié),因此我們將偏移量乘以2,然后在“字節(jié)”之間加上空格數(shù)。

對(duì)我們來(lái)說(shuō)唯一剩下的就是輸出適當(dāng)格式的列表,該格式由'out'變量表示。

print(out) # prints something like ['extension_1', 'extension_2']

事實(shí)證明,各種項(xiàng)目都面臨著識(shí)別文件格式的需求,因此我決定以開(kāi)放源代碼的形式發(fā)布我的解決方案,作為Python的模塊,稱為fleep link to GitHub page。您可以使用標(biāo)準(zhǔn)的python實(shí)用程序'pip'安裝模塊:

pip install fleep

項(xiàng)目頁(yè)面上還有用法示例和受支持的文件格式的完整列表。

上述就是關(guān)于使用Python確定文件格式的全部?jī)?nèi)容介紹,想了解更多關(guān)于Python的信息,請(qǐng)繼續(xù)關(guān)注中培偉業(yè)。

標(biāo)簽: Python 軟件研發(fā)
主站蜘蛛池模板: 国产一区二区影视 | 国产高清不卡 | 天天躁夜夜躁狠狠躁2021牛牛 | 一级黄色片在线免费观看 | 国产免费一区二区三区视频天天爽 | 精品国产视频一区二区三区 | 男人的天堂色欲网 | 久青草无码视频在线播放 | 久久精品91视频 | 黄绝一级毛片 | 亚洲男人的天堂色偷免费 | 少妇精品一区二区三区在线观看 | 久久久无码精品亚州日韩免费看 | 人妻无码第一区二区三区 | 亚洲精品一区二区 | 米奇7777狠狠狠狠视频影院 | A三级三级成人网站在线视频 | 中文亚洲av片在线观看 | 亚洲va欧美va国产va天堂影院 | 亚洲欧美日本一区二区 | 国产91精品在线 | 午夜琪琪网 | 色欲久久久天天天综合网精品 | 一本一道久久综合久久 | 一级生性活片免费视频片 | 92国产精品偷窥熟女精品视频 | 国产九区一区在线 | 国产在线看一区 | 欧美成人精品A片免费一区99 | 6080亚洲精品一区二区 | 在线观看成人一区 | 最近最新MV在线观看免费高清 | 亚洲伦无码中文字幕另类 | 99久久精品免费看国产高清 | 免费播放一区 | 国产日产欧美最新 | 蜜桃臀无码AV在线观看 | 亚洲欧美国产高清 | 少妇无码一区二区三区免费 | 欧美一区久久久 | 黄色毛片子|