openの戻り値は『読み取るためのファイルオブジェクト』だからです。
codecs.open(filename, mode='r', encoding=None, errors='strict', buffering=1)
エンコードされたファイルを mode を使って開き、透過的なエンコード/デコードを提供するStreamReaderWriter のインスタンスを返します。
引用元:Python 標準ライブラリ » 7. バイナリデータ処理
メソッドや引数を適切に取り扱うことで、ただ読む以上の処理が出来ます。
ちなみに私の環境では次のような属性がありました。
Python
1>>> import codecs
2>>> codecs.StreamReader
3<class 'codecs.StreamReader'>
4>>> dir(codecs.StreamReader)
5['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattr__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'charbuffertype', 'decode', 'encode', 'read', 'readline', 'readlines', 'reset', 'seek']
一般にファイルを扱う際は、そのサイズに留意する必要があります。
小さなファイルしか扱わないのであれば、openと同時に読み込んでしまっても問題ないでしょう。
しかし、とてつもなく大きなファイルを読もうとすると... メモリが悲鳴を上げます。
一気に読み込むのではなく、『読み込むためのオブジェクト』を用意しているのです。
このようなストリームを用いた仕組みは、入出力においては一般的だと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/03 10:32