Pythonで使えるioストリーム配信

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

雨の日は釣りに行かないので、自宅で釣具を眺めてニヤニヤしていることがよくあります。

最近、餌木猿用に第一精工のケースを購入したのですが、うっかりしていて3号用のサイズを購入してしまいました。

店で3.5号が入る大きさかどうか確認していたのですが、どうにも1本1本分けて入れる仕切りの底がないと思っていたものがあったので、3.5号だと、どうあがいても頭が入らないんです。

なので、デザインカッターを使って底を切り取ったら、ピッタリ収まるようになったのですが、取り出すときにかんなが引っかかっちゃうんですよね。

とはいえ、自分で加工したコンパクトな餌木猿3.5号用専用ケースができて超満足して、眺めるたびにニヤニヤしちゃってるんです。

ほんとちょっと変態が入っているかもしれません。。。

それでは、今日もPython学習を始めましょう。

昨日の復習

昨日は、最後に必ず行う処理をExitstackを使って実行してみました。

try-finally文で実行することができましたが、exitstackを使うことでシンプルなコードにすることができました。

pop_allを読み解くのに時間がかかりましたが、リストで学んだpopメソッドから連想すれば、なんとか理解することができました。

詳細について、は昨日の記事をごらんください。

今日は、ioストリームの簡単な使い方を学習します。

with open

withステートメントを使ってファイルを開いて書き込んだあと、ファイルを読み込むやり方と、ioストリームを使って値を保持して出力するコードを書いてみました。

import io

with open('/tmp/test.txt', 'w') as f:
    f.write('test type')
with open('/tmp/test.txt', 'r') as f:
    print(f.read())

f = io.StringIO()
f.write('string io test')
f.seek(0)
print(f.read())

3行目から6行目はこれまでに学習したwithステートメントを使ったファイルの作成と読み込みです。

8行目から11行目がioストリームを使って同じようなことをしています。

8行目でオブジェクトをオブジェクトを生成して、9行目でstring io testと書き込んだあと、seek(0)でカーソルを最初に移動させ、11行目で書き込んだデータを出力しています。

出力結果

test type
string io test

どちらも書き込んだデータは存在していますが、StringIOは出力が終われば削除されます。

バイトデータの取扱

先程のコードの8行目のコードをf = StrintIO()からf = BytesIO()、9行目のコードf.write('string io test)f.write(b'string io test)に変えればバイトデータを扱うことも可能になります。

f = io.BytesIO()
f.write(b'string io test')
f.seek(0)
print(f.read())

出力結果

test type
b'string io test'

微妙にコードが変わってくるのですが、8行目を変更せずに実行するとエラーが起こってしまいます。

バイトデータを扱う際はBytes()に変更するのも必要になるので、頭に入れておいてください。

まとめ

以前習ったコードが登場すると、その詳細まできっちりと覚えているわけではないので、過去の記事を検索してチェックするのですが、4月頃に学習していたことはあまり詳細まで覚えていられないんだろうな〜ということ考えつつ、ガッツリと復習するようにしています。

毎日復習するのは難しいので、過去に学習したコードなどが出てきたときに短時間でサクッと復習するようにしても構いません。

きちんと覚えられるかどうかは人それぞれですが、私の場合は、とにかく復習して、接触する回数を増やすしかないですね。

ということで、明日もGood Python!