Free性欧美Hd另类_精品亚洲欧美视频在线观看_freesex欧美喷水_字幕av在线_久久久久久国产免费_伊人5566

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

使用Python確定文件格式

2020-09-29 11:21:30 | 來源:中培企業IT培訓網

很多人都遇見過這樣的問題,存儲卡開始將所有文件移至LOST.DIR文件夾,沒有任何擴展名。長期以來,這里積累了500多種不同類型的文件:圖片,視頻,音頻,文檔。不可能單獨理解文件的格式,因此我開始尋找一種以編程方式解決此問題的方法。下面我們就來介紹一下如何使用Python確定文件格式的方法信息,想知道的請繼續往下看。

  尋找決定

我不想以Web服務或程序的形式使用現成的解決方案,因此有一種想法來編寫一個控制臺實用程序,該實用程序將遍歷所有文件并自動安裝擴展。選擇Python編寫實用程序。出于以下幾個原因,搜索合適的模塊和庫沒有帶來結果:

· 缺乏開發商的支持

· 功能過多

· 缺乏對Python新版本的支持

· 代碼過于復雜

在許多庫中,python-magic非常流行。它是libmagic庫的包裝器。但是,如果沒有用于Unix庫的DLL,就無法在Windows下使用python-magic。因此,此選項還不夠好。

  解決問題

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

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

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

幸運的是,Internet上有兩個很好的站點,帶有許多不同格式的簽名。目標是最常見的格式。

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

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

同樣,簽名通常比3GP多媒體容器之類的文件開頭偏移一點。

  1.編制數據清單

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

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

哪里:

· 格式-文件格式;

· offset —簽名從文件開頭的偏移量;

· 簽名—用于指定文件格式的適當簽名的數組。

  2.編寫實用程序

  導入必要的模塊:

import os

import json

  讀取數據列表:

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

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

很好,數據列表已加載。現在,我們將文件讀取為字節數組。我們只讀取前32個字節,因為確定通用格式不需要更多,并且完全讀取大文件將花費很長時間。

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

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

x90x00x03x00x00x00x04

現在必須將字節轉換為十六進制系統:

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

接下來,我們創建一個列表,在其中添加適當的格式:

out = []

現在,我們創建一個結構,該結構將循環確定文件格式:

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"])

  關于此字符串:

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

由于我們的字節用字符串表示,兩個符號表示一個字節,因此我們將偏移量乘以2,然后在“字節”之間加上空格數。

對我們來說唯一剩下的就是輸出適當格式的列表,該格式由'out'變量表示。

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

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

pip install fleep

項目頁面上還有用法示例和受支持的文件格式的完整列表。

上述就是關于使用Python確定文件格式的全部內容介紹,想了解更多關于Python的信息,請繼續關注中培偉業。

標簽: Python 軟件研發
主站蜘蛛池模板: 男女激情无遮挡免费视频 | 欧美永久免费 | 天堂中文视频 | 韩国V欧美V亚洲V日本V | 一级黄色绿像片 | 日韩欧美一级大片 | 在线观看高清视频 | 日本爱爱视频 | 欧美性少妇xxxx极品高清hd | 视频在线观看入口黄最新永久免费国产 | 国产成人综合一区精品 | 欧美精品久久人妻无码 | 国产一在线精品一区在线观看 | 国产精品网站在线免费观看 | 精品欧美一区二区在线观看欧美熟 | 不卡的在线视频 | 成人免费视频亚洲 | 天天射天天爱天天干 | 女性高爱潮aaaa级视频免费 | 亚洲精品在线a | 国产精品午夜爆乳美女视频 | 亚洲精品国产91 | 国产精品原创巨作av | 日本aaa大片 | 99热这里只有精品在线观看 | 伊人久久大香线焦av综合影院 | 豆奶成人短视频 | 国产精品伦理久久久久久 | 国产精品久久久久国产a级 乱男乱女www7788 | 国产片在线观看.com | 国产无遮挡乱子伦免费精品 | 国产香蕉伊蕉伊中文在线视频 | 免费无码一级成年片在线观看 | 久久午夜视频 | 最新大地资源网在线观看免费 | 在线bt天堂网www在线 | 中字幕视频在线永久在线 | 91大神在线免费?看 h免费看 | 国产无遮挡乱子伦免费精品 | 九九视频在线观看黄 | tobu8日本高清在线观看 |