2021-08-19に投稿

Python 標準ライブラリ io I/Oストリーム

ioモジュールでファイルの書き込み・読み込みを行うストリームの機能が提供されています。

ファイルの読み書きの例

組込関数openでストリームのインスタンスを作成し、ファイルの読み込み・書き込みを行うことができます。

組み込み関数open

with open('./sample.txt', 'w', encoding='utf-8') as f:
    f.write('テスト1\n')
    f.write('テスト2')

with open('./sampl_b.txt', 'wb') as f:
    f.write(b'abc')

with open('./sample.txt', 'r', encoding='utf-8') as f:
    print(f.read())

openの第1引数はファイルのパス、第2引数は読み込み・書き込みのモードです。

* r 読み込み用
* w 書き込み用(最初にファイルをクリア)
* x 排他的な作成用(ファイルが存在するとエラー)
* a 追記用
* b バイナリーモード
* t テキストモード
* '+' 読み書き用

rとtはデフォルトで指定されます。

ioモジュールのエイリアス

ioモジュール以下にopenのエイリアスの関数も定義されています。

io.open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

テキストI/O

文字列によるテキストの書き込み

with open('./sample.txt', 'w', encoding='utf-8') as f:
    print(f.writable()) # => True 書き込み可能
    print(f.tell()) # => 0 ストリーム位置
    print(f.closed) # => False ストリームクローズしていない

    f.write('テスト1\n')
    f.writelines(['テスト2\n','テスト3'])

    print(f.tell()) # => 34 ストリーム位置
    f.close()
    print(f.closed) # => True ストリームクローズ

文字列によるテキストの読み込み

with open('./sample.txt', 'r', encoding='utf-8') as f:
    print(f.readable()) # => True 読み込み可能
    print(f.tell()) # => 0 ストリーム位置
    print(f.closed) # => False ストリームクローズしていない

    print(f.readline()) # => テスト1 1行読み込み
    print(f.readlines()) # => ['テスト2\n', 'テスト3'] 行の配列で読み込み

    f.close()
    print(f.closed) # => True ストリームクローズ

バッファ付きのストリームによるテキストの書き込みと読み込み

with io.FileIO('./sampl_b2.txt', 'w') as f, io.TextIOWrapper(f,encoding='utf-8') as tw:
    tw.write('あいうえお')

with io.FileIO('./sampl_b2.txt', 'r') as f, io.TextIOWrapper(f,encoding='utf-8') as tw:
    print(tw.read()) # => うえ

インメモリーのテキストストリーム

with io.StringIO() as f:
    f.write('テスト\n')
    print(123, file=f)
    print(f.getvalue())
    # テスト
    # 123

バイナリ I/O

バイト列によるバイナリの書き込み

with open('./sampl_b.txt', 'wb') as f:
    f.write(b'xyz')

バイト列によるバイナリの読み込み

with open('./sampl_b.txt', 'rb') as f:
    f.read()

io.FileIOによるバイナリの書き込みと読み込み

with io.FileIO('./sampl_b.txt', 'w') as f:
    f.write(b'xyz')

with io.FileIO('./sampl_b.txt', 'r') as f:
    print(f.read()) # => b'xyz'

バッファ付きのストリームによるバイナリの書き込みと読み込み

with io.FileIO('./sampl_b.txt', 'wb') as f,io.BufferedWriter(f) as bw:
    bw.write(b'112233')

with io.FileIO('./sampl_b.txt', 'rb') as f,io.BufferedReader(f) as br:
    print(br.read()) # => b'112233'

インメモリのストリーム

with io.BytesIO(b"abc") as f:
    print(f.read()) #=> b'abc'

参考

Originally published at marusankakusikaku.jp
ツイッターでシェア
みんなに共有、忘れないようにメモ

maru3kaku4kaku

Pythonこつこつ学習中。よく忘れる。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント