[python] ファイルに直接printする

print関数の出力先を標準エラー出力やファイルなど、いろんな場所に切り替える小ネタの紹介

print関数

皆さんご存知のprint関数でございます。
print(~~)ってすると画面に文字が出るアレです。

print("Hello world!")
# Hello world!

ファイルに直接printする

print関数は実はファイルに直接printすることもできるんです。

with open("hello.txt", "w") as f:
    print("hello world", file=f)

print関数でfile=~~を指定することで出力先を切り替えることができます。

上の例ではopenで開いたファイルに出力するように指定しています。

こうすると画面に文字は出ませんが代わりにファイルに直接printの内容が書き込まれます。

標準エラー出力にprintする

print関数は特に指定しなければ標準出力に文字が書き込まれるので、次は標準エラー出力に書き込まれるように変えてみます。

import sys

print("Hello world!", file=sys.stderr)

実行してみると同じように画面に文字が出ると思いますが、出力先が標準出力ではなく標準エラー出力になっています。

def eprint(*args, **kwargs)
    return print(*args, file=sys.stderr, **kwargs)

可変長引数を用いて上記のようにすることで標準エラー出力にprintする関数を作ることもできます。

ファイルライクオブジェクトにprintする

StringIOなどのファイルライクオブジェクトにもファイル同様printすることができます。

from io import StringIO

sio = StringIO()

print("Hello world!", file=sio)

まとめ

print関数のキーワード引数fileに出力先を指定するといろんなところに文字が出力できる。