如何在python中读取用户输入直到EOF?

时间:2017-09-01 15:34:34

标签: python-3.x eof

我在UVa OJ中遇到过这个问题。 272-Text Quotes

嗯,这个问题非常简单。但问题是我无法读取输入。输入以文本行的形式提供,输入的结尾由EOF表示。 在C / C ++中,这可以通过运行while循环来完成:

while( scanf("%s",&s)!=EOF ) { //do something } 

如何在python中完成。?

我在网上搜索过,但我找不到任何满意的答案。

请注意,必须从控制台读取输入,而不是从文件读取。

5 个答案:

答案 0 :(得分:4)

您可以使用sys模块:

import sys

complete_inout = sys.stdin.read()

sys.stdin是一个类似于对象的文件,您可以将其视为Python File object

来自doc:

  

内置函数读取帮助:

     

_io.TextIOWrapper实例的read(size = -1,/)方法       从流中读取最多n个字符。

Read from underlying buffer until we have n characters or we hit EOF.
If n is negative or omitted, read until EOF.

答案 1 :(得分:3)

对于HackerRank和HackerEarth平台,首选以下实现方式:

while True:
try :
    line = input()
    ...
except EOFError:
    break;

答案 2 :(得分:2)

您可以使用python中的sysos模块从控制台读取输入直到文件末尾。我已经多次在SPOJ这样的在线评委中使用过这些方法。

第一种方法(推荐):

from sys import stdin

for line in stdin:
    if line == '': # If empty string is read then stop the loop
        break
    process(line) # perform some operation(s) on given string

请注意,在您阅读的每一行的末尾都会有一个结束字符\n。如果您想在打印line时使用print(line, end='')来避免打印2个结束字符。

第二种方法:

import os
# here 0 and 10**6 represents starting point and end point in bytes.
lines = os.read(0, 10**6).strip().splitlines() 
for x in lines:
    line = x.decode('utf-8') # convert bytes-like object to string
    print(line)

此方法不适用于所有在线评委,但它是从文件或控制台读取输入的最快方法。

第三种方法:

while True:
    line = input()
    if line == '':
        break
    process(line)

如果您仍然使用python 2,则将input()替换为raw_input()

答案 3 :(得分:2)

这是怎么做的:

while True:
   try :
      line = input()
      ...
   except EOFError:
      pass

答案 4 :(得分:0)

如果您需要一次阅读键盘上的一个字符,您可以在Python中看到getch的实现:Python read a single character from the user