Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何在EOF之前按字节块从stdin读取数据?_Python_Python 3.x - Fatal编程技术网

Python:如何在EOF之前按字节块从stdin读取数据?

Python:如何在EOF之前按字节块从stdin读取数据?,python,python-3.x,Python,Python 3.x,我想逐块读取标准输入,直到EOF。例如,我可能有一个非常大的文件,我想从STDIN一次读取并处理1024个字节,直到遇到EOF。我见过sys.stdin.read(),它一次将所有内容保存在内存中。这是不可行的,因为可能没有足够的空间来存储整个文件。还有“sys.stdin中的行”,但它仅通过换行符分隔输入,这不是我想要的。在Python中有什么方法可以实现这一点吗?文件对象的read()方法接受可选的size参数 如果指定大小,则最多读取和返回大小字节。如果已到达文件的结尾,f.read()将

我想逐块读取标准输入,直到EOF。例如,我可能有一个非常大的文件,我想从STDIN一次读取并处理1024个字节,直到遇到EOF。我见过sys.stdin.read(),它一次将所有内容保存在内存中。这是不可行的,因为可能没有足够的空间来存储整个文件。还有“sys.stdin中的行”,但它仅通过换行符分隔输入,这不是我想要的。在Python中有什么方法可以实现这一点吗?

文件对象的
read()
方法接受可选的
size
参数

如果指定
大小
,则最多读取和返回大小字节。如果已到达文件的结尾,f.read()将返回一个空字符串(“”)

请参阅和

伪代码:

with open('file') as f:
    while True:
        buffer = f.read(1024) # Returns *at most* 1024 bytes, maybe less
        if buffer = '':
            break
        process_data(buffer)

您可以使用
f.read(n)
以块的形式读取stdin(或任何文件),其中
n
是要作为参数读取的整数字节数。如果文件中没有任何内容,它将返回空字符串。

灵感来源于@Andre的答案,但使用python3代码并处理SIGINT(仅仅因为…):

#/usr/bin/env蟒蛇3
########
#格比#
########
输入信号
导入系统
def过程_数据(缓冲区):
sys.stdout.buffer.write(缓冲区)
sys.stdout.buffer.flush()
def read_stdin_流(处理程序,块大小=1024):
将sys.stdin作为f:
尽管如此:
buffer=f.buffer.read(块大小)
如果缓冲区==b“”:
打破
处理程序(缓冲区)
def信号处理器(信号,帧):
sys.stdout.buffer.flush()
系统出口(0)
def main():
signal.signal(signal.SIGINT,信号处理器)
#请注意,对于这个特定示例,“chunk_size”为1
读取标准数据流(处理数据,数据块大小=1)
如果名称=“\uuuuu main\uuuuuuuu”:
main()
例如:

<代码>$表示以$表示的i(序号15);do echo-n“$i”和&sleep 1;完成|蟒蛇3 g.py 12345