ちょっとZipファイルをたくさん落としたときに個別に解凍するのがめんどくさかったので作成。
Mac版も作ろうかと思ったけどパス名関連の文字コードをUTF-8にすれば良いかと思ったけどそれだけだと上手く行きませんでしたorz ※解決したらそのうちアップします。
今回、作ったプログラムはPythonのファイルとバッチファイルを組み合わせたものです。
(2009/02/05 追記)
ocean-city さんからコメント欄にて 最新のPython 2.6.1ではドロップを受け入れることを教わりました。 そのため直接、Pythonにドロップ可能な2.6.1ではバッチファイルの 作成は必要ありません。
とりあえずPythonを実行したディレクトリ内のZipファイルを一括解凍できれば良いかとも思ったんですがそれだけだと使い勝手が悪いのでディレクトリをドラッグしすればそのディレクトリ内のZipファイルを解凍する様に作成しました。
ここの処理がPythonだとできないので(※)バッチファイルを使っています。
※色々とライブラリを使えばできないことはないんですが今回は簡単に実装するためバッチです(^_^;)
バッチファイルの内容は以下の様になります。
cd /d %~dp0 all_unzip.py %1 pause
この内容をエディタで作成し、ファイル名を run.bat で保存します。
次にPythonプログラムです。こちらは以下の様に記述し、バッチファイルと同じ位置に保存します。
文字コード:UTF-8
ファイル名:all_unzip.py
# -*- coding: utf-8 -*- import zipfile import os import sys import codecs import glob sys.stdout = codecs.getwriter('cp932')(sys.stdout) if (len(sys.argv) >= 2): targetdir = sys.argv[1] if not os.path.isdir(targetdir): print u' %s は存在しないディレクトリです' % (targetdir) quit() else: targetdir = os.getcwd() searchpath = os.path.join(targetdir, '*.zip') print 'searchpath:'+searchpath.decode("cp932") for zippath in glob.glob(searchpath): print 'zip:'+os.path.basename(zippath).decode("cp932") try: zf = zipfile.ZipFile(zippath, 'r') for path in zf.namelist(): fullpath = os.path.join(targetdir, path) dec_fullpath = fullpath.decode("cp932") dec_dir,dec_file = os.path.split(dec_fullpath) # print 'path:'+dec_fullpath # print 'file:'+dec_file # print 'dir:'+dec_dir if os.path.basename(dec_file): if not os.path.isdir(dec_dir): os.mkdir(dec_dir) uzf = file(dec_fullpath, 'wb') # 出力先はZipファイルでの指定位置 uzf.write(zf.read(path)) uzf.close() zf.close(); os.remove(zippath) except: print u'***解凍時にエラー発生(%s)' % (zippath.decode("cp932"))
これでバッチファイル(run.bat)を実行すると同じディレクトリに有るZipファイルを解凍し、バッチファイルにディレクトリをドラッグした場合はそのディレクトリ内のZipが解凍されます。
まあ、わざわざ自前で作らなくても探せばば同じ様なことができるアプリとかありそうですけど、こちらの方がやられているようにOS Xで作ったZipファイルを解凍する様に加工するなどPythonならではの柔軟性があるかなぁ?と思います。
OSXで作ったzipをWinで解凍するさらにもう一つの方法 (Python) - 路傍のプログラマ
http://blog.goo.ne.jp/anoydevl/e/aacc643cc234c2456b4c5d84b2abd8c2