2017-08-15 10 views

答えて

1

:私はこのような構造でmp3ファイルに範囲$ A7- $ ACにアクセスして読むことができますどのように

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

でバイナリファイルを開くことができることを知っていますバイナリデータの抽出に役立つPythonのstructライブラリ

import struct 

mp3_filename = r"my_mp3_file.mp3" 

with open(mp3_filename, 'rb') as f_mp3: 
    mp3 = f_mp3.read() 
    entry = mp3[0xA7:0xAC+1] 
    print struct.unpack("{}b".format(len(entry)), entry) 

これは、あなたのような整数のリスト与えるだろう:あなたはバイトのそれぞれをintepretする方法はPythonを伝えるためにフォーマット文字列を渡す

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

を。この例では、すべて単純にバイトから整数に変換されます。各書式指定子は繰り返し回数を持つことができるので、書式文字列は"6b"になります。

これらを0に変換するには、ファイルを閉じてもう一度開く必要があります。これを行うには、次のように入力します。書き込み。次のように新しい出力をビルドします。

import struct 

mp3_filename = r"my_mp3_file.mp3" 
zeros = "\0\0\0\0\0\0" 

with open(mp3_filename, 'rb') as 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" 

with open(mp3_filename, 'wb') as f_mp3: 
    f_mp3.write(mp3[:0xA7] + zeros + mp3[0xAD:]) 

をFYI:MP3ファイルからタグ情報を抽出することができます既製のPythonライブラリがあります。 id3readerパッケージのようなものを見てください。

+0

ありがとうございます。結果として得られる整数は私にとって完璧です。私は0がないかどうかだけをチェックしたいと思います。しかし、どうすればそのようなバイトを0に置き換えてファイルに書き戻すことができますか? – xpilgrim

+0

IMHO、id3readerパッケージは、id3タグではなく、lameタグのフィールドですが、id3readerパッケージはこれに適していません。 – xpilgrim

+0

バイナリ書き込みモードでmp3ファイルを再度開き、セクションを0に置き換える必要があります。私は答えを更新しました。 –

関連する問題