複数行のユーザー入力を受け取るPythonプログラムを作成したい。例えば:
This is a multilined input.
It has multiple sentences.
Each sentence is on a newline.
生の入力の複数の行をどのように取り込むことができますか?
sentinel = '' # ends when this string is seen
for line in iter(raw_input, sentinel):
pass # do things here
すべての行を文字列として取得するには、次のようにします。
'\n'.join(iter(raw_input, sentinel))
Python 3:
'\n'.join(iter(input, sentinel))
ユーザーが空の行を入力するまで(またはstopword
を別のものに変更するまで)行を読み続けます
text = ""
stopword = ""
while True:
line = raw_input()
if line.strip() == stopword:
break
text += "%s\n" % line
print text
または、sys.stdin.read()
を試すことができます
import sys
s = sys.stdin.read()
print(s)
この答えを拡張するだけで https://stackoverflow.com/a/11664652/4476612 ストップワードの代わりに、行があるかどうかを確認するか、じゃない
content = []
while True:
line = raw_input()
if line:
content.append(line)
else:
break
リスト内の行を取得し、\ nで結合して形式を取得します。
print '\n'.join(content)
これを試して
import sys
lines = sys.stdin.read().splitlines()
print(lines)
入力:
1
2
3
4
出力: ['1'、 '2'、 '3'、 '4']
sys.stdin.read()を使用して、ユーザーから複数行の入力を取得できます。例えば
>>> import sys
>>> data = sys.stdin.read()
line one
line two
line three
<<Ctrl+d>>
>>> for line in data.split(sep='\n'):
print(line)
o/p:line one
line two
line three
*ユーザーがコントロールD(またはストップワード)で終了せずに、ユーザー入力の複数行を読み取る方法を見つけたかったため、私はこの質問に長い間苦労しました。最後に、pyperclipモジュール(pip installを使用してインストールする必要があります)を使用して、Python3で方法を見つけました。以下は、IPのリストを取得する例です*
import pyperclip
lines = 0
while True:
lines = lines + 1 #counts iterations of the while loop.
text = pyperclip.paste()
linecount = text.count('\n')+1 #counts lines in clipboard content.
if lines <= linecount: # aslong as the while loop hasn't iterated as many times as there are lines in the clipboard.
ipaddress = input()
print(ipaddress)
else:
break
私にとって、これはまさに私が探していたものです。複数行の入力を取り、必要なアクションを実行し(ここでは単純な印刷)、最後の行が処理されたときにループを中断します。それがあなたにも等しく役立つことを願っています。