为什么stdin逐行读取而不是像字符串一样逐字读取?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么stdin逐行读取而不是像字符串一样逐字读取?相关的知识,希望对你有一定的参考价值。
program1.朋友:
a = "this is a test"
for x in a:
print(x)
program2.朋友:
a = """this is a test
with more than one line
three, to be exact"""
for x in a:
print(x)
program3.朋友:
import sys
for x in sys.stdin:
print(x)
infile.txt:
这是一个测试 有多条线 和第二个例子一样 但有更多的话
为什么program1和program2都在单独的行中输出字符串中的每个字符,但是如果我们运行cat infile.txt | python3 program3.py
,它会逐行输出文本?
答案
来自python sys.stdin
的docs的描述:
与解释器的标准输入,输出和错误流相对应的文件对象。
所以sys.stdin
是一个文件对象,而不是一个字符串。要查看File对象的迭代器是如何工作的,请再次查看python docs:
当文件用作迭代器时,通常在for循环中(例如,对于f:print line.strip()中的行),将重复调用next()方法。此方法返回下一个输入行,或者当文件打开以供读取时触发EOF时引发StopIteration(当文件打开以进行写入时行为未定义)
因此,迭代器在每次调用时产生下一行输入,而不是在字符串上观察到的逐字符迭代。
另一答案
sys.stdin
是一个文件句柄。迭代文件句柄一次产生一行。
另一答案
因为sys.stdin
中的数据存储为像行数组一样,所以当你运行for x in sys.stdin
时,它会逐行而不是字符。要做到这一点,你试试这个:
for x in sys.stdin:
for y in x:
print(y)
print("")
以上是关于为什么stdin逐行读取而不是像字符串一样逐字读取?的主要内容,如果未能解决你的问题,请参考以下文章