【python】解凍ツールの作成(zip・tar)

python

仕事をしていて圧縮されたファイルやフォルダを解凍するということはありませんか?

私は仕事でよくzipやtarで圧縮されたファイルやフォルダを解凍することがあります。

そういった際に使用するのは7zipというツールですが、そこで毎回思うのがもっと簡単に解凍する方法はないものか?ということです。

そこでこの記事では簡単にファイル・フォルダを解凍するためのツールを作成してみます。

なお今回ご紹介する方法はpythonを使用するため、もしpython環境がないという方は下記記事を参考に構築してみてください。

pythonの開発環境構築手順 | エンジニアKISARAGIの備忘録 (kisaragi-it.com)

zipファイルの解凍ツール

では圧縮ファイルの代表格でもあるzipファイルの解凍ツールをまず作成していきます。

zipを解凍する方法ですが、pythonにはzipfileというライブラリが用意されているのでそれを使用して下記コードを作成いたしました。

【コード例】
import zipfile
with zipfile.ZipFile('ファイル(フォルダ)名.zip','r') as folder:
    folder.extractall()

ただこれを実行してみると解凍されたファイル(またはフォルダ)の名前が文字化けしています。

これはファイルを圧縮した際にはShift_JIS(cp932)形式で保存されるのですが、zipfileライブラリを使用して解凍するとUTF-8に変換されるようで、それにより文字化けが発生しているようです。

なので少し工夫して下記のようなコードに修正いたします。

【修正コード】
import zipfile
with zipfile.ZipFile('ファイル(フォルダ)名.zip') as folder:
    for info in folder.infolist():
        info.filename=info.filename.encode('cp437').decode('cp932')
        folder.extract(info)

上記は「encode(‘cp437’).decode(‘cp932’)」の部分で一度CP437に形式を変換したのちに、Shift-JIS形式に戻すことで文字化けを解消しています。

これで圧縮されたzipファイルは問題なく解凍することができます。

tarファイルの解凍ツール

では次にご紹介するのは、こちらもたまに見かける圧縮形式であるtarです。

私も仕事ではこの形式で圧縮されていることがたまにあるので、一応その方法も解説しておきます。

【コード例】
import tarfile
with tarfile.open('ファイル(フォルダ)名.tar') as folder:
    folder.extractall()

上記がtarファイルを解凍するツールとなります。

こちはzipのように文字化けをするということはなかったので、zipよりも簡単な作りとなっています。

zip&tarを同時に解答するツール

最後にzipとtarで二重に圧縮されている場合を紹介します。

私の本業ではこの形式が一番よく圧縮形式として使用されています。

と言っても2つのコードをほぼそのまま連結させただけです。

【コード例】
import zipfile
import tarfile
with zipfile.ZipFile('ファイル(フォルダ)名.zip') as folder:
    for info in folder.infolist():
        info.filename=info.filename.encode('cp437').decode('cp932')
        folder.extract(info)
with tarfile.open(info.filename) as folder2:

これで2度圧縮されていたとしても一度ですべて解凍することができます。

ここまで解凍は問題なく実施できましたが、今のままだと毎回フォルダ名を指定する必要があり、少し面倒です。

そこでファイルをドラッグ&ドロップで解凍する方法について考えていきたいと思います。

【コード例】
import zipfile
import tarfile
import sys
file_names=sys.argv[1:]
for file_name in file_names:
    with zipfile.ZipFile(file_name) as folder:
        for info in folder.infolist():
            info.filename=info.filename.encode('cp437').decode('cp932')
            folder.extract(info)
    with tarfile.open(info.filename) as folder2:
        folder2.extractall()

上記がそのコードで「sys.argv[1:]」でドラッグ&ドロップしたファイル名をリスト化で作成しています。

そしてそれをfile_nameという変数に1つづつ代入してそれをそれぞれtar、zipを解凍しています。

ただこれだけではドラッグ&ドロップの解凍が実施できない場合がある。

そこで実施するのが、pyファイルで右クリック→プロパティから下記プログラムをpythonのアイコンに変更するというものです。

これでドラッグ&ドロップでの解凍が可能となりました。

因みにこれは複数ファイルを一度に解凍することも可能ですので、一度試してみてください。

まとめ

この記事ではpythonを使用して圧縮されたファイルをより簡単に解凍するためのツールを作成いたしました。

  • zipファイルの解凍ツール
  • tarファイルの解凍ツール
  • zip&tarを同時に解答するツール

探せば見つかりそうなツールではありますが、そういったツールを勝手に入れることができないという場合もあると思います。

なのでそういった場合に自分で作成してみることで、今後解凍の手間が省くことができるはずです。

ぜひ一度試してみてください。

以上で今回の解説は終了となります。

コメント

タイトルとURLをコピーしました