Python中的Input()函数在输入时,遇到回车符,那么一次输入就结束了。这不能满足输入多行文本并且行数也不确定的情形,当然输入空行也是允许的。
方法1:直接利用input()函数逐行读取数据,直到EOF。利用异常处理机制实现。
方法1:利用input()的返回值为空串来判定输入已经到达EOF写法1.2:利用异常处理机制实现
lines=[]
while True:
try:
lines.append(input())
except:
break
print(lines)
实际运行时,可以输入多行,当输入最后一行并回车后,按组合键ctrl+D,表示EOF,即End of File、文件尾的意思。此时,input()函数会遇到EOF的异常。Python的异常处理机制将捕获到此异常,执行except部分的语句,此语句为break,因此,立即跳出while循环。这正好满足了我们的需要。
例如,输入:
12 345 3.14159回车
I am a student.回车
Hello, world!回车
在集成开发环境中运行时,请按ctrl+D组合键结束多行输入。如果在Windows命令行下用"python 源代码文件名.py”方式运行时,请按ctrl+Z组合键结束多行输入。
输出结果如下:
['12 345 3.14159', 'I am a student.', 'Hello, world!']
方法2:利用标准输入文件对象sys.stdin实现
因为键盘是标准输入设备,计算机操作系统将键盘也是当做文件来对待的,其实计算机操作系统将包括键盘显示器鼠标打印机等在内的各种外围设备都当做文件来对待。Python中与键盘对应的文件对象是sys.stdin,因此可以利用sys.stdin.readlines()函数一次性读取所有文本,一直到遇到文件尾即EOF为止。可以通过for aLine in sys.stdin:的方式逐行读取文本直到EOF。
写法2.1:利用sys.stdin.readlines()函数一次性读取所有文本。
import sys
lines=sys.stdin.readlines()
print(lines)
写法2.2:通过for aLine in sys.stdin:的方式逐行读取文本直到EOF。
import sys
lines=[]
for aLine in sys.stdin:
lines.append(aLine)
print(lines)
输入同上,
输出:
['12 345 3.14159\n', 'I am a student.\n', 'Hello, world!\n']
写法2.3:利用sys.stdin.readline()每次读取一行,根据遇到EOF时返回空行从而结束while循环。
import sys
lines=[]
while True:
aLine=sys.stdin.readline()
if aLine=="":
break
lines.append(aLine)
print(lines)
对于写法2.1、写法2.2、写法2.3的程序运行后,
输入同上,
输出结果均如下:
['12 345 3.14159\n', 'I am a student.\n', 'Hello, world!\n']
可以看出,方式1的输出结果与写法2.1、写法2.2、写法2.3的输出结果有细微差别,后者的每行末尾有'\n'字符(即回车符),前者则没有。