Python 標準ライブラリ io I/Oストリーム
Publish date: 2021-08-12
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'