アールグレー特売所

ゲームやら競プロやらのメモ書き

sys.stdinによる標準入力 (Python3)

就活のコードテストではsysモジュールのstdinを用いた標準入力を要求されることが多く、非常に戸惑ったのでそれらにまつわること。基本的に公式ドキュメントままです。

 

ファイルオブジェクトの作成

import sys
F = sys.stdin

stdinはinput()の呼び出しも含むすべての対話型入力に使われるそうです。形式は通常のテキストファイルのようで、今後このファイルの中身を受け取るときはすべて文字列として受け取ります。

 

ファイルから一行だけ読み取る

F = sys.stdin
N = F.readline()
List = F.readline()
print(N.strip("\n"))
print(List.strip("\n").split(" "))

ファイルを一行だけ読むときはreadline()を用います。この時、改行文字が一緒に引っ付いてくるので、strip("\n")を用いて取り除く必要があります。readline()を行うごとに一行ずつ読み進めています。下記のような標準入力の二行目のような形式のものをリストとして受け取りたいときは、空白文字列でsplit()します。

#標準入力
5 
5 8 6 7 4
#標準出力
5 #文字列であることに注意
['5', '8', '6', '7', '4']

 

ファイルから複数行読み取る

F = sys.stdin
for line in F:
    print(line.strip("\n"))

同じく改行文字を除去しておきます。出力は次のようになります。もちろんどちらの行も文字列です。

5
5 8 6 7 4

readlines()を使うとファイルのすべての行をリスト形式で読み取れますが、以下の通りもれなく改行文字がついてくる模様。

F = sys.stdin
print(F.readlines())
['5\n', '5 8 6 7 4']