簡體   English   中英

如何從Python中的文件讀取字節

[英]How Does One Read Bytes from File in Python

問題類似,我試圖讀取ID3v2標記頭,並且無法弄清楚如何在python中獲取單個字節。

我首先將所有十個字節讀入一個字符串。 然后我想解析各個信息。

我可以在字符串中獲取兩個版本號字符,但后來我不知道如何獲取這兩個字符並從中獲取一個整數。

結構包似乎是我想要的,但我不能讓它工作。

這是我的代碼到目前為止(我對python btw很新...所以請放輕松我):

def __init__(self, ten_byte_string):
        self.whole_string = ten_byte_string
        self.file_identifier = self.whole_string[:3]
        self.major_version = struct.pack('x', self.whole_string[3:4]) #this 
        self.minor_version = struct.pack('x', self.whole_string[4:5]) # and this
        self.flags = self.whole_string[5:6]
        self.len = self.whole_string[6:10]

打印出任何值,除了明顯廢話,因為它們格式不正確。

如果您有一個字符串,您希望將其解釋為16位整數,則可以通過以下方式執行此操作:

>>> s = '\0\x02'
>>> struct.unpack('>H', s)
(2,)

請注意,>適用於big-endian(整數的最大部分首先出現)。 這是id3標簽使用的格式。

對於其他大小的整數,您使用不同的格式代碼。 例如。 “i”表示有符號的32位整數。 有關詳細信息,請參閱help(struct)。

您也可以一次解壓幾個元素。 例如,對於2個無符號短路,后跟有符號的32位值:

>>> a,b,c = struct.unpack('>HHi', some_string)

按照您的代碼,您正在尋找(按順序):

  • 一個3字符串
  • 2個單字節值(主要版本和次要版本)
  • 一個1字節的標志變量
  • 32位長度的數量

這個格式字符串是:

ident, major, minor, flags, len = struct.unpack('>3sBBBI', ten_byte_string)

為什么寫自己的? (假設你沒有檢查出這些其他選項。)有幾個選項用於從Python中讀取MP3中的ID3標簽信息。 看看我在這個問題上的答案

我打算推薦struct包,但后來你說你試過了。 試試這個:

self.major_version = struct.unpack('H', self.whole_string[3:5])

pack()函數將Python數據類型轉換為位,而unpack()函數將位轉換為Python數據類型。

我正在嘗試讀取ID3v2標記頭

FWIW, 已經有了一個模塊

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM