web-dev-qa-db-ja.com

Pythonでraw_inputの複数行を読み取るにはどうすればよいですか?

複数行のユーザー入力を受け取るPythonプログラムを作成したい。例えば:

This is a multilined input.
It has multiple sentences.
Each sentence is on a newline.

生の入力の複数の行をどのように取り込むことができますか?

52
PacketPimp
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))
75
jamylak

ユーザーが空の行を入力するまで(またはstopwordを別のものに変更するまで)行を読み続けます

text = ""
stopword = ""
while True:
    line = raw_input()
    if line.strip() == stopword:
        break
    text += "%s\n" % line
print text
7
Junuxx

または、sys.stdin.read()を試すことができます

import sys
s = sys.stdin.read()
print(s)
6
Venkat

この答えを拡張するだけで https://stackoverflow.com/a/11664652/4476612 ストップワードの代わりに、行があるかどうかを確認するか、じゃない

content = []
while True:
    line = raw_input()
    if line:
        content.append(line)
    else:
        break

リスト内の行を取得し、\ nで結合して形式を取得します。

print '\n'.join(content)
3

これを試して

import sys

lines = sys.stdin.read().splitlines()

print(lines)

入力:

1

2

3

4

出力: ['1'、 '2'、 '3'、 '4']

1
Arpitt Desai

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
0
vishnu vardhan

*ユーザーがコントロール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

私にとって、これはまさに私が探していたものです。複数行の入力を取り、必要なアクションを実行し(ここでは単純な印刷)、最後の行が処理されたときにループを中断します。それがあなたにも等しく役立つことを願っています。

0
Jon