Python タージーゼット targz

Python学習【365日チャレンジ!】97日目のマスターU(@Udemy11)です。

ウォーキングをしていると、蚊柱に遭遇することが多くなってきたので、夕方のウォーキングに行くのがちょっと億劫になってしまいます。

ちなみに蚊柱ってどうして頭の上をついてくるんでしょうね。

気になったので調べてみると、ユスリカのオスが集まって羽音をたてることでメスを誘っているそうです。

また、周辺のものより高いところに集まる習性があって、人が通ると頭の上をついてくるということでした。

ちなみに、血を吸う蚊はメスだけなので、血を吸われることはないようですが、気持ち悪いのはどうしようもありません。

このことにかまけて、当分ウォーキングはサボってしまいそうです。

それではPython学習をすすめていきましょう!

昨日の復習

昨日は、ファイルのいろいろな操作について学習しました。

次のような標準ライブラリを読み込んでファイルのコピーやリネーム、削除などができました。

  • osモジュール
  • pathlibモジュール
  • globモジュール
  • shutilモジュール

特にosモジュールでは、現状30あるメソッドの中で、次のような使用頻度の高いメソッドを学習しました。

  • os.path()
  • os.getcwd()
  • os.rename()
  • os.symlink()
  • os.mkdir()
  • os.rmdir()
  • os.remove()
  • os.listdir()

詳しくは、昨日のエントリーを参照してください。

学習したモジュール以外にも便利な標準ライブラリがたくさんあるので、こんな使い方できるものがないかなと思ったときにGoogleで検索してみてください。

それでは、今日の学習にはいりましょう!

tarファイルの準備

tarファイルは、複数のファイルやフォルダを一つにまとめたファイルで、そのファイルを圧縮したものがtar.gzファイルです。

まとめるだけなら、フォルダでいいんじゃない?

と思っちゃうのですが、複数のファイルやフォルダを集めて一つのアーカイブファイルにしているのがフォルダと違うところなのですが、こちらのサイトで詳しく解説してくれているので、理解が深まるかもしれません。

それでは、そのtar.gzファイルを作るために、これまでに学習してきた知識を活用して、次のようなファイル構造を作ってみましょう。

フォルダ構造

targz_dir ┳ test.txt
          ┗ sub_dir ━ sub.txt

test.txtの中身には、This is testsub.txtの中身には、sub fileと書き込んで、print出力してみます。

import os
import pathlib

os.mkdir('targz_dir')
os.mkdir('targz_dir/sub_dir')
pathlib.Path('targz_dir/test.txt').touch()
pathlib.Path('targz_dir/sub_dir/sub.txt').touch()

with open('targz_dir/test.txt', 'w+') as f:
    f.write('This is test')
    f.seek(0)
    print(f.read())

with open('targz_dir/sub_dir/sub.txt', 'w+') as fsub:
    fsub.write('sub file')
    fsub.seek(0)
    print(fsub.read())

出力結果

This is test
sub file

あとから気づきましたが、2行目、6行目と7行目は不要でしたね。

9行目、14行目のwithステートメントを使ったopenメソッドの書き込みモードだけでtest.txtsub.txtが作られることをあとから思い出しました。

コンソールには、それぞれのテキストファイルの中身が出力されています。

11行目、16行目のseek(0)を使って読み込み位置をもとに戻さないと何も出力されないので、???ってなった場合は、きちんと復習しておきましょう。

ファイル操作については昨日学習したばかりで、withステートメントを使った書き込み読み込みモードは数日前に学習しました。

tarファイルの圧縮

続いて、作成したtargz_dirを圧縮してtest.tar.gzファイルを作成します。

import tarfile

with tarfile.open('test.tar.gz', 'w:gz') as tr:
    tr.add('targz_dir')

tarfileモジュールを読み込んで、openメソッドを使って、書き込み圧縮モードw:gztest.tar.gzファイルを作成し、そのファイルに事前に作成したtargz_dirフォルダを追加しています。

Python タージーゼット 圧縮

tarファイルの展開

次に圧縮したファイルの中に、きちんとファイルやフォルダが含まれているか確認するために、test.tar.gzファイルを展開してみます。

import tarfile

with tarfile.open('test.tar.gz', 'r:gz') as tr:
    tr.extractall(path='test_tar')

展開する場合は読み込み展開モードr:gzでファイルを開いて、extractallメソッドの引数にpath='フォルダ名'を指定します。

Python タージーゼット 展開

展開するフォルダをtest_tarと指定していたので、階層が一つ深くなっていますが、同じ階層に展開する場合は、extractallメソッドに引数を指定せずにtr.extractall()だけで実行すれば、同じ階層に、targz_dirが展開されます。

展開せずに中のファイルを読み込む

extractallメソッドの場合、中身すべてを展開しますが、中のファイル名やフォルダ構造がわかっていれば、ファイルだけ指定して中のファイルを出力することができます。

import tarfile

with tarfile.open('test.tar.gz', 'r:gz') as tr:
    with tr.extractfile('targz_dir/sub_dir/sub.txt') as f:
        print(f.read())

出力結果

b'sub file'

最初のbは、バイト(byte)の意味で、tar.gzにまとめられているsub.txtの中身であるsub fileが出力されます。

ただ、どんな場面でこの機能を使うのかは現時点でイメージできないんですよね。

タージーゼット

Macを使っていると、よく見かけるtar.gzファイルについて学習しましたが、なんて読んでいいかわかっていませんでした。

酒井さんの講座を受講すると、これまでなんと読んでいいかわからなかった名前が色々と分かるんですよね。

独学だとわからないこともUdemyの講座を利用すれば、スムーズに理解できるので、Pythonを学習するなら、酒井さんの講座は超おすすめですよ。

Udemy講師 酒井さん プログラミング Python

今日は、過去の学習内容も使いながらすすめてきましたが、学習内容は、最初の頃に解説した【エビングハウスの忘却曲線】に従って忘れていくものです。

エビングハウスの忘却曲線

1日1歩3日で3歩、3歩進んで2歩下がる

と水前寺清子さんも365歩のマーチで歌っているように?!、進んでは戻りながら、Pythonを学習していきましょう!

それでは明日もGood Python!