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 test
、sub.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.txt
とsub.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:gz
でtest.tar.gz
ファイルを作成し、そのファイルに事前に作成したtargz_dir
フォルダを追加しています。
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='フォルダ名'
を指定します。
展開するフォルダを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を学習するなら、酒井さんの講座は超おすすめですよ。
今日は、過去の学習内容も使いながらすすめてきましたが、学習内容は、最初の頃に解説した【エビングハウスの忘却曲線】に従って忘れていくものです。
引用元: マナビバ:基礎力定着テスト
1日1歩3日で3歩、3歩進んで2歩下がる
と水前寺清子さんも365歩のマーチで歌っているように?!、進んでは戻りながら、Pythonを学習していきましょう!
それでは明日もGood Python!