標準入力を1行ずつ処理する

Ruby の

while line = gets
  puts line
end

は,コマンドライン引数で与えられたファイルを一つずつ開いて1行ずつ読み込み,出力するループである。コマンドライン引数でファイルを指定しなければ,標準入力から1行ずつ読み込む。

これと同じことをするためのパッケージが fileinput である:

import fileinput

for line in fileinput.input():
    print(line, end="")  # または print(line.rstrip())

fileinput.input() に引数でファイル名(のリスト)を与えれば,それが優先される。

Ruby の gets と違い,ループの中で余分に行を読み込むことはできない。

標準入力だけ読めばよいなら,次のようにできる:

import sys

for line in sys.stdin:
    print(line, end="")  # または print(line.rstrip())

ループではなく,標準入力から1行だけ読むには,次のようにする:

line = sys.stdin.readline()

プロンプトで入力を促すには,次のようにする:

n = int(input('正の整数を入力してください: '))

全部の行を行(文字列)のリストの形で読み込むには,次のようにする:

lines = sys.stdin.readlines()

全部の行を一つの文字列の形で読み込むには,次のようにする:

lines = sys.stdin.read()

標準入力でないファイルの場合は,次のようにする:

with open("filename") as f:
    for line in f:
        print(line, end="")

あるいは

with open("filename") as f:
    lines = f.readlines()  # または f.read()

Last modified: