mp3 - How to read specific bytes from a binary file in Python? -


i learn handle read , write binary data. know can open binary file with

f = open(myfile, mode='rb') fb = f.read() f.close() return fb 

how can access , read range $a7-$ac in mp3 file structure: lame mp3 tags

you should take @ python's struct library extracting binary data.

import struct  mp3_filename = r"my_mp3_file.mp3"  open(mp3_filename, 'rb') f_mp3:     mp3 = f_mp3.read()     entry = mp3[0xa7:0xac+1]     print struct.unpack("{}b".format(len(entry)), entry) 

this give list of integers such as:

(49, 0, 57, 0, 57, 0)         

you pass format string tell python how intepret each of bytes. in example, converted bytes integers. each format specifier can have repeat count, example, format string "6b". if wanted decode words, change format specifier, there full table of options you: struct format characters

to convert these zeros, need close file , reopen writing. build new output follows:

import struct  mp3_filename = r"my_mp3_file.mp3" zeros = "\0\0\0\0\0\0"  open(mp3_filename, 'rb') f_mp3:     mp3 = f_mp3.read()     entry = mp3[0xa7:0xac+1]     print struct.unpack("{}b".format(len(entry)), entry)      if entry != zeros:         print "non zero"  open(mp3_filename, 'wb') f_mp3:     f_mp3.write(mp3[:0xa7] + zeros + mp3[0xad:]) 

fyi: there ready made python libraries able extract tag information mp3 files. take @ id3reader package.


Comments

Popular posts from this blog

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

python Tkinter Capturing keyboard events save as one single string -

sql server - Why does Linq-to-SQL add unnecessary COUNT()? -