如何从 python 中的标准输入读取固定的行块(比如 100)?

How to read fixed chunk of lines (say 100) from stdin in python?

我想从 stdin 读取前 100 行,将其转换为数据帧,并对其进行一些处理。然后从 stdin 读取接下来的 100 行(101-200),将其转换为数据帧,进行一些处理......等等

readlines() in python 没有任何参数来指定要读取的行数。

R 中的 readLines() 有这个但我不能在 python 中做同样的事情。

在此感谢任何帮助。

尝试使用 sys.stdin。它有一个文件接口,符合 unix 哲学。这意味着您可以对其进行迭代以获取行。之后,您只需像任何迭代器一样对它进行切片——我建议使用 itertools https://docs.python.org/2/library/itertools.html

import sys
import itertools

CHUNK_LENGTH = 200

lines_chunk = itertools.islice(sys.stdin, CHUNK_LENGTH)

更好的是,使用石斑鱼的 itertools 配方并获得可迭代的块(参见上面 link)

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

chunks_of_200 = grouper(sys.stdin, CHUNK_LENGTH, fillvalue="")
for chunk_of_200 in chunks_of_200:
     # do something with chunk

如果你想要原版 Python 3,你可以

import sys
lines = [line for _,line in zip(range(200),sys.stdin)]