サブロウ丸

Sabrou-mal サブロウ丸

主にプログラミングと数学

Python 入力まとめ

pythonスクリプト内に定数やその他データを入力する方法で、僕が知っているものをまとめました。 大きく分けて以下の3つです。
1. sys(引数入力)
2. input(標準入力)
3. fileからの入力



sysを使う(引数入力)

python3 file名.py [引数1] [引数2] ...
という形式で入力する方法です.
(1番オーソドックスなやり方かも)

import sys
a = sys.argv[0]
b = sys.argv[1]
c = sys.argv[2]
print(a)
print(b)
print(c)
print(len(sys.argv))

上記をsample1.pyとして保存、実行すると

$ python3 sample1.py cat dog
sample.py
cat
dog
3

と出力されます。
上記を見て分かるように、sys.argvはlistとして生成されます。
そして0番目のindexに実行ファイル名が入り、それ以降に引数が順番に入ります。

sys. argvは可変長です。なので引数をたくさん指定してやっても怒られることはありません。逆に言えば引数の数が状況によって異なる...みたいなときに有効なわけです。



inputを使う(標準入力)

a = input()
b = input()
print(a)
print(b)

上記をsample2.pyとして保存、実行すると

$ python3 sample2.py
#入力待ち
cat    # catと入力してみる
#入力待ち
dog    # dogと入力
#print結果
cat   
dog 

input()入力はsysとは違い、実行してからプログラム中のinput()の数だけ入力を求められます。プログラミングコンテスト等でよく使うのはこれなのではないでしょうか。

例えばじゃんけんをするプログラムを書いたことがある人は多いかと思いますが、計算をして入力して、それを元にまた計算をして..を繰り返すプログラムにはこれを使います。



fileからの入力

別データfileからデータを読み込む機会は多々あるかと思います。 そんなときに用いる方法です。

f = open([file path], 'r')
f.close()

file pathには読み込むファイルのパスが入ります。その後ろの'r'は今から読み込むよ!という合図です。 openでファイルを開いて closeでファイルを閉じます。

ファイルの中身を1行ずつ表示させるには

for line in open([file path], 'r'):
    print(line)

ただしこれだと¥nなどの特殊文字も一緒に読み込んでしまうので、 print(line)のところをprint(line.strip())に書き換えると¥nなどの特殊文字を省いてくれます。(同時に文字列前後の空白も消えますが)
もしくはprint(line.replace('¥n'))ですかね。

read()関数を使えば、file情報を1変数に詰め込めます。

f = opne([file path], 'r').read()

ファイルの中身を1行ずつ読み込みたいときは僕はこのread()を使って

for line in open([file path], 'r').read().split('¥n'):
    print(line)

こう書きます。少し冗長かもしれませんが。

openの簡単な応用ですが、ファイルの行数を数えるには以下のように書きます。

num_line = sum([1 for _ in open([file path], 'r')])

など。



csv形式のデータ等なら専用のモジュールを使うのが良いと思います。そのことについてはまた後日記事を書きます。(気力があれば.....)