標準入力で複数行(文字列)を読み込む方法について

各種方法で標準入力で複数行(文字列)を読み込んでリストへの格納を行ってみた。

入力の関数、メソッドとしては
read、readline、readlines、input
を使用する。
(read、readline、readlinesではsys.stdinを使う。はじめにsysをimportしておく)

例:
abcdef
ghijkl
mnopqr
stuvwxyz


①read
readは複数行の文字列を改行を含めそのまま読み込む。

a = sys.stdin.read()
で読み込んで、
print(a)
で出力するとそのまま

abcdef
ghijkl
mnopqr
stuvwxyz

と表示される。
print(type(a))でデータの型を確認すると、
<class 'str'>となり、str(文字列型)であることが分かる。

これをリストに入れるには改行でsplitする。

(上記a = sys.stdin.read()で読み込んだ後で)
array_a = a.split("\n")

これを、
print(array_a)
で出力すると、
['abcdef', 'ghijkl', 'mnopqr', 'stuvwxyz']
となり、めでたくリストに格納される。

②readline
readlineは1行ずつ読み込む。また改行もいっしょに読み込む。

b = sys.stdin.readline().rstrip()
で読み込んで、
print(b)
で出力すると、

abcdef

はじめの1行のみが読み込まれて表示される(改行でもう1行(空白が)表示される)。
print(type(b))で型を確認すると、やはりstrである。

複数行をリストに入れるには、forループを使う。またrstripで改行を取り除く。

array_b = []
for i in range(4):
     array_b.append(sys.stdin.readline().rstrip())

print(array_b)で出力すると、
['abcdef', 'ghijkl', 'mnopqr', 'stuvwxyz']
と、リストに格納されていることが分かる。


③readlines
readlineは複数行を読み込んでリストに格納する。ただし改行もいっしょに読み込まれる。

c = sys.stdin.readlines()
で読み込んで、
print(c)
で出力すると

['abcdef\n', 'ghijkl\n', 'mnopqr\n', 'stuvwxyz']
と表示され、
print(type(c))で型を調べると、list(リスト型)と表示される。

そこで、forループでrstripを使って改行を取り除く。

array_c = []

for line in sys.stdin.readlines():
    array_c.append(line.rstrip())

print(array_c)で出力すると、
['abcdef', 'ghijkl', 'mnopqr', 'stuvwxyz']
と、改行が取り除かれてリストに格納されていることが分かる。


④input
iputは1行読み込む。readlineと違い改行は自動的に取り除かれる。

d = input()

で読み込んで、
print(d)
で出力すると、

abcdef
と1行のみ読み込まれている(改行は取り除かれる)。型はstrである。

複数行を読み込むにはforループを使う。readlineと違いrstripで改行と取り除く必要はない。

array_d = []
for i in range(4):
    array_d.append(input())

print(array_d)で出力すると、
['abcdef', 'ghijkl', 'mnopqr', 'stuvwxyz']
と、リストに格納されて表示される。

0 件のコメント:

コメントを投稿

python print

print_pythonnote print ¶ 言葉や数値を出力する ¶ In [ ]: print ( "...