« 広島Ruby勉強会 #012 に行ってみて | トップページ | ETロボコン中四国独自勉強会0に行ってきて »

2011年4月 4日 (月)

Pythonでバイナリをread

昨日のRuby勉強会の影響で、
PythonとRubyの違いを見てた。

ふと、練習がてら、
Pythonでも書いてみるかと思い、
AndroidのBoot.imgを分解するスクリプトに調整。

元ネタがPerlなので、できるだろうという思惑。


もちろん、すんなりとは行かないわけだが、
つまったポイントのひとつがバイナリ形式。


ってことで、
バイナリファイルの読み書きについて。
まず、ファイルのオープンでは、
オプションっぽいものを付ければいいらしい。

 f=open("test,txt","rb")

読み込むのもそのまま、

 buf=f.read(byteSize)

で良いみたい。


でも、読んだ後がどうも文字列扱いっぽいので、
数字のバイナリ値なら、変換処理が必要。
そこで、import struct を使えばいいらしい。
使い方は、Python v2.6.2 documentation参照

例えば、4byteの構造を数字化するなら、

 import struct
 f=open("data","rb")
 buf=f.read(4)
 val=struct,unpack("L",buf)

で、valに変換した数字が入ってくる。


ってことで、上記変換できれば、
ヘッダ部分の解析ができそうなので、
とりあえず、移植ができた。

バイナリのコピーの仕方は、
 rf=open("srcFile","rb")
 wf=open("dstFile","wb")
 buf=rf.read(byteSize)
 wf.write(buf)
でやったけど、サイズとか中身が少し心配。


変数名が気分で違うとか、
めちゃくちゃだけど、
どうも分解できてるっぽい。

ヘルプもなにもないけど、ここに置いてみた

先は長いなぁ(使う技術なのか疑問もあるが)


リンク:
「structの節」Python v2.6.2 documentation
「Read Binary data from file」on DANIWEB
「MDDファイルをPythonで扱うために
 その2 modo 301」on Zで行こう!

HOWTO: Unpack, Edit, and Re-Pack Boot Images

|

« 広島Ruby勉強会 #012 に行ってみて | トップページ | ETロボコン中四国独自勉強会0に行ってきて »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/97274/39479607

この記事へのトラックバック一覧です: Pythonでバイナリをread:

« 広島Ruby勉強会 #012 に行ってみて | トップページ | ETロボコン中四国独自勉強会0に行ってきて »