【Python】ファイルやフォルダの圧縮と展開 – tarfile, zipfile

Pythonの応用
スポンサーリンク

ここではPythonを使ってファイルの圧縮と展開をやっていきます。

tarfileとzipfileを扱います。

tarfileはMacやLinuxなどを使っている人は目にすることがあると思いますが、Windowsを使っている人にはあまり目にすることはないでしょう。もう1つのzipfileはどちらのユーザーもよく使うものだと思います。

では、フォルダやファイルをひとまとめにする圧縮と展開をそれぞれやっていきましょう。

今回の操作をするために、例として作業ディレクトリに次のようなフォルダとテキストファイルの構造を用意しました。ディレクトリの中にさらにディレクトリやファイルが入っているのを確認してください。

これを使って作業をしていきます。DS_Storeが表示されていますが、これは本来は隠しファイルなので作業上の説明としては無視してください。

スポンサーリンク

tarfileを使った圧縮と展開

それでは圧縮と展開をやっていきましょう。

ここでは、tarfileをインポートして作業して行きます。

with文を使って圧縮ファイルと作っていきます。ファイル名を’test.tar.gz’に指定して、モード’w’でファイルを作成しますが、圧縮する為に’w:gz’とします。これをtfとしてadd()で一番上にあるフォルダのdir1をファイルに入れて圧縮します。

実行すると、同じ作業ディレクトリ内に、test.tar.gzというファイルが作成されるはずです。これで、dir1内にあるファイルやディレクトリを圧縮することができました。

今度はこれは展開していきましょう。

展開するには、読み込みなのでモードを’r:gz’にします。これをextractall()を使ってpathをtest_dirとして展開します。

実行すると、作業ディレクトリにtest_dirというフォルダができて、その中身を確認すると、dir1以下の各ファイルとフォルダが入っているのが確認できます。

今、圧縮したファイルを全てを展開しましたが、展開しなくても中身を確認することができます。

dir1内にあるdir1.txtファイルを確認するコードを書いてみます。

ファイルを開くまでは同じで、さらにwith文を使ってextractfile()に対象のファイルの位置を指定して、それをread()で読んで出力します。

実行するとこうなります。(ファイル名tar.pyでAtomで実行しています)

ターミナルにファイルに書かれた内容が表示されています。

Macのターミナルでtarファイルを圧縮・展開するコマンド

上記のディレクトリ、ファイルを同じようにMacのターミナルからUNIXコマンドを使って圧縮・展開するには次のコマンドで行います。

  • 圧縮コマンド

  • 展開コマンド

スポンサーリンク

zipfileを使った圧縮と展開

今度はzipfileを使って圧縮と展開をやっていきましょう。

zipfileをインポートします。with文でZIpfile()に’test.zip’のファイル名を指定して圧縮します。モードは書き込みなので’w’です。これをzとして、write()でdir1を書き込むことで圧縮ファイルtest.zipが出来上がります

ただし、これはdir1のフォルダのみが圧縮されるだけで他の中身はありません。write()で書き込む時に、z.write(‘dir1/dir.txt’)などと全て指定しかないと中身も一緒に圧縮されません。

そこで、フォルダ内全てのファイルを圧縮する方法をみていきましょう。

ここではさらに、globというものをインポートします。Zipfile()で開くまでは同じです。

これをfor文を使って取り出すのですが、glob()を使ってフォルダを指定します。この時アスタリスク(*)を2つ指定しています。これが1つだと同じフォルダ内しか見ませんが、2つにすることで配下のディレクトリ、ファイルを見ることになります。recursiveをTrueにすることで、再帰的にディレクトリ内を全て見てくれることになります。これで取り出したものをwrite()で圧縮ファイルに書き込んでいます。(ここではpirnt()で抜き出したファイルを出力しています)

実行します。(zipdir.pyとしてAtomで実行しています)

dir1内の全てのファイルを取り出しています。同じディレクトリ内にtest.zipが作成されていることを確認しましょう。

今度はこの圧縮ファイルを展開してみます。

Zipfile()で圧縮ファイルを指定し、読み込みなのでモードを’r’とします。これをextractall()で展開先フォルダをtest_zipとして展開しています。

実行すると、作業ディレクトリにtest_zipというフォルダができて、その中身を確認すると、dir1以下の各ファイルとフォルダが入っているのが確認できます。

コードを実行しなくても圧縮ファイルをダブルクリックすればファイルは展開できます。

こちらもファイルを全て展開しなくても中身を確認することができます。

tarfileでやった時と同じように、dir1内にあるdir1.txtファイルを確認するコードを書いてみます。

ファイルを開くまでは同じで、さらにwith文を使ってopen()に対象のファイルの位置を指定して、それをread()で読んで出力します。

実行するとこうなります。

dir1.txtの中身が表示されています。

Macのターミナルでzipファイルを圧縮・展開するコマンド

同じようにMacのターミナルからUNIXコマンドを使って圧縮・展開するには次のコマンドで行います。

  • 圧縮コマンド

  • 展開コマンド

Macのターミナル操作の基本的なUNIXコマンドはこちらです。

Macのターミナル操作でよく使う基本的なUNIXコマンド入門一覧
Macでターミナルの操作を覚えて置くと何かと便利です。ここではMacのターミナル操作でよく使う基本的なUNIXコマンドを入門編として一覧にしてみました。Linuxコマンドとしても使えますから、他でも活用できますよ。Macの醍醐味もわかります。
スポンサーリンク

まとめ

ここでは、Pythonを使ってファイルやフォルダの圧縮と展開をやってみました。

tarfileとzipfileの使い方はどちらも似ていますが、違いもありますのでしっかり区別して起きましょう。

tarfileはMacやLinuxを使っている人は見慣れているでしょうが、Windowsユーザーはあまり使わないと思います。

解凍ソフトなどがインストールされていれば、ダブルクリックなどで圧縮ファイルを展開できます。

Pythonの応用
スポンサーリンク
CodeGraffitiをフォローする

コードグラフィティ:とにかく進め!独学プログラミング – Python入門から始めてどこまで学べる?
タイトルとURLをコピーしました