え〜御題。
クリスマスシーズンということで、びっくり箱的にス
クリプトを動かすとクリスマスカードが生成されるとゆー
プログラムを考えていて、その延長で、バイナリファイ
ルをスクリプトに埋め込む方法を考えてみました。
Pythonでフツーに書くとこんな風になります。
#---bin2txt.py---<begin>
import sys, re
in_file = sys.argv[1]
out_file = re.sub(r"\.","_",in_file) + ".py"
f = open(in_file, "rb")
r = f.read()
s = repr(r) # バイナリデータを文字表現で出力
k = "open('" + in_file + "','wb').write(" + s + ")"
open(out_file,"w").write(k)
#---bin2txt.py---<end>
ステップとしては・・・
・バイナリデータをファイルから読み込む
・String(バイナリのシーケンス) を repr で表示させる
ことで、文字列に変換
・Pythonスクリプトを付け加えてファイルに収納
といった感じです。
変数を減らすと、こんな風、かな?
#---bin2txt2.py---<begin>
import sys, re
f_n = sys.argv[1] # f_n .. file name
open(
re.sub(r"\.","_",f_n) +".py","w"
).write(
"open('" + f_n +
"','wb').write(" +
repr(open(f_n, "rb").read()) + ")")
#---bin2txt2.py---<end>
sys.argv[1] を何度も書けば、変数は減らせますが、
さすがに読むのも書くのも辛いので、残しました。
ここらへんの処理は、Perl や Ruby は強そうなのです
が、どうでしょうか?
※awk はさすがに、バイナリは使えない筈だと思ったけ
ど・・・sedとかどうかな?
/機械伯爵/
※Python版も、もうちっとマシなのがあればお願いします。
・・・あ、圧縮かける手があったか(汗)