[英]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)
按照您的代碼,您正在尋找(按順序):
這個格式字符串是:
ident, major, minor, flags, len = struct.unpack('>3sBBBI', ten_byte_string)
我打算推薦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.