Python学習【365日チャレンジ!】272日目のマスターU(@Udemy11)です。
久しぶりによしもとの新喜劇をみたら、おもしろくてお腹を抱えて笑ってしまいました。
大体の流れはわかっているのに笑えてしまいます。
やっぱり予定調和のストーリーは安心できるんでしょうね。
ひとととり笑ったので、今日もPython学習を始めましょう。
昨日の復習
昨日は、io
ストリームの簡単な使い方を学習しました。
with
ステートメントを使ってファイルを保存して、保存したファイルを読み込んで出力するのと同様に、ioストリームを使って書き込み読み込みができました。
詳細については昨日の記事をごらんください。
今日は、io
ストリームを使ってZipファイルの中のファイルをハードディスクに保存せずに確認する方法を学習します。
インメモリに保存
インメモリとは
インメモリとは、ソフトウェアを実行する際、使用するプログラムやデータのすべてをメインメモリ(RAM)上に読み込み、ストレージ(外部記憶装置)を使わないこと。特に、そのような方式のデータベースを「インメモリデータベース」という。
引用元: IT用語辞書e-Words
ということで、インメモリを使ってZipファイルを開いて中身を読み込む作業をio
ストリームを使ってやってみます。
import io
import requests
import zipfile
url = ('https://files.pythonhosted.org/packages/a7/e0/'
'30642b9c2df516506d40b563b0cbd080c49c6b3f11a70b4c7a670f13a78b/'
'setuptools-50.3.2.zip')
f = io.BytesIO()
r = requests.get(url)
f.write(r.content)
with zipfile.ZipFile(f) as z:
with z.open('setuptools-50.3.2/README.rst') as r:
print(r.read().decode())
最初にインポートするライブラリはio
とrequests
とzipfile
です。
6行目でZipファイルのURLを指定していますが、こちらは、PyPiに用意されているsetuptoolsの最新版で、ダウンロードページにいって、右クリックでリンクのアドレスをコピーして貼り付けています。
10行目でBytesIO
オブジェクトを作成して、12行目のrequests.get
でコンテンツをダウンロードして、13行目のf.write
でコンテンツをインメモリに書き込んでいます。
あとは、Zipファイルを開いて出力しますが、今回はパッケージに含まれるREADME.rst
を開いて表示しています。
17行目はr.read()
だけでも出力できますが、decode()
で表示を整えています。
出力結果
まとめ
通常なら、ファイルをいちいちダウンロードして解凍したファイルをハードディスクに保存してファイルを読み込むという作業が必要ですが、io
ストリームを使うことで、インメモリにファイルを保存して読み込んで、プログラムが終了したあとは、削除してくれます。
シンプルな使い方の紹介だけなので、これをどのように使うかは使う人次第です。
プログラムはプログラムを書く人がイメージをしてどのように組み立てていくかは自由なので、ブロックを積み上げて何かを作り上げるロゴと同じような楽しさがあります。
イメージを膨らませておもしろいプログラムを書けるようになりましょう!
それでは、明日もGood Python!