LoginSignup
7
3

More than 3 years have passed since last update.

open(0)とすると標準入力に対応するファイルオブジェクトが取得できる

Posted at

Python3で標準入力から入力を読む方法はいくつかありますが、組み込み関数のopenを使って、open(0)とすると標準入力に対応するファイルオブジェクトを取得できます。

利用例としては以下のようになります。

stdin = open(0)
for line in stdin:
    do_something(line)

openの引数を0にすると、なぜ標準入力になるのでしょうか? ドキュメントを注意深く読むと以下のように記述されています。

file は path-like object で、開くファイルの (絶対または現在のワーキングディレクトリに対する相対) パス名を与えるものか、または、ラップするファイルの整数のファイルディスクリプタです。

openの引数としてはファイルパスだけでなく、ファイルディスクリプタを示す整数を指定することもできます。標準入力のファイルディスクリプタは0ですから、open(0)とすると、標準入力に対応するファイルオブジェクトが取得できるわけです。

なおsys.stdinも標準入力のファイルオブジェクトです。つまりopen(0)の戻り値とsys.stdinは実質的には同じものになるといえます。sys.stdinのほうが、標準入力を利用することが明確でわかりやすいのですが、import sysとする必要があって、タイプ数が増えます。コードゴルフや競技プログラミングなどではopen(0)のほうがお得かもしれません。

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3