2011年3月9日水曜日

pythonでLZH形式ファイルを解凍する

UNLHA32.DLLを利用した解凍方法など検索すると
---
(Windowの場合)
windll.UNLHA32.Unlha(0, r'x -r1 -n "%s\\%s" "%s\\" *.*' % (path, fname, path), None, 0)
---
こういうやり方でできるものがあった。

もっとシンプルやりたかったので別の探してみたら見つけた。

前提条件:
・VC++が入っている事。
basetsd.hが無いとエラーが出たらKoderよりヘッダソースをコピーしてくる。
http://www.koders.com/c/fid4BF9F859DE62B18F2A3C47B66D776CDDE9D75AF4.aspx

1.インストール
easy_install、pipのパスが通ってない場合はフォルダ移動して(例:d:\traclight\python\scripts)

% easy_install http://svn.neotitans.net/lhafile/
% pip install http://svn.neotitans.net/lhafile/

実行。
コンパイル成功して
 python\Lib\lzhlib.pyd
が入っていたらインストール完了。

2.使い方
import lhafile

# Create Lhafile instance from filename
f = lhafile.Lhafile('foo.lzh')

# Print each file informaion in archive file.
for info in f.infolist():
   print info

# Extract data from archive
f.read('bar.txt')

追記:
使ってみてみたらまだバグがあるらしいので注意。
2011.05.27
作者the-o様に修正していただきました!
thank you:)


参考URL
http://trac.neotitans.net/wiki/lhafile

4 件のコメント:

the-o さんのコメント...

lhafileを作成しているものです(^^;。

こちらのサイトをみて、改めてテストして3つ問題を修正しました。

もしよろしければ確認していただけたりするでしょうか。もしくはバグの再現方法を教えていただけたりしないでしょうか。

# そんなに使われるモジュールではないですが、折角なので直しておきたく。

Gummo さんのコメント...

レスありがとうございます。
作者の方でしたか(・ω・;
メモ程度の記事ですみませんです。

自分にはとても需要があるものなので、
さっそく試させていただきます。

Gummo さんのコメント...

うーむ、圧縮ファイルの構成が
 ・フォルダ1つ、フォルダ内に4つのファイル
最初の階層がフォルダで圧縮されているもので試してみたら、エラーするみたいです。
まだ1つのファイルしかチェックしてないので、もう少し様子みてみます。

the-o さんのコメント...

確認が遅れてすみません。いろいろなアーカイバで試してみたのですが再現させることが出来ませんでした。。。参考URLの所に解凍するサンプルコードを追加してみたので、よければお試しください。

もしくは、setup.py にメアドが記載されているのでアーカイブを送付いただけると助かります。

Androider