Linuxで日本語ファイル名のzipを解凍するためのpythonスクリプトを作ってみた

突然ですが、Windows Vistaを卒業して Ubuntu 9.04に入門しました。 普段の仕事はぜんぶUbuntu on Dynabook SS/RX1でやってます。 ほとんどの作業は問題ないものの、zipファイルの中身のファイル名が文字化けするのがイラっときてました。。。 と、いうわけで、参考になりそうなコードがあったので 勉強がてらpythonで回避用のプログラムを組んでみました。 元ネタのlolloo-htnの日記 - 解凍すると文字化けするzipファイルをpythonでなんとかしてみるから、パスワード入力ができるように、出力先をエイヤーでするようにちょびっと変更しています。 なんせ「文字列の連結ってどうやるんだっけ?」ってくらい素人なので アラアラなのはご容赦くださいませ。 直し方とか教えてもらえると超うれしいです。

#/usr/bin/env python
#coding:utf8
# special thanks to id:lolloo-htn
# http://d.hatena.ne.jp/lolloo-htn/20090126/1232977712
import zipfile, os, os.path, sys
targetfile=sys.argv[1]
z = zipfile.ZipFile(targetfile)
outdirbase = targetfile.decode("UTF-8") + "_"
requirepassword=0
for info in z.infolist():
if((info.flag_bits != 0) & (requirepassword != 1)):
print "password: "
password=sys.stdin.readline().rstrip()
z.setpassword( password )
requirepassword=1
for name in z.namelist():
name_u = name.decode("cp932")
data   = z.read(name)
fname = os.path.join( outdirbase, name_u )
d,f = os.path.split(fname)
if not os.path.isdir(d):
os.makedirs(d)
ofh = open(fname,"wb")
ofh.write(data)
ofh.close()
z.close()

See also