如何从python中的stdin读取固定的行(比如100)?

时间:2015-04-09 06:22:41

标签: python python-2.7 stdin readline

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

python中的

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

R中的readLines()有这个但是我无法在python中做同样的事情。

感谢您的任何帮助。

2 个答案:

答案 0 :(得分:0)

尝试使用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配方进行分组并获得可迭代的块(参见上面的链接)

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

答案 1 :(得分:0)

如果你想要vanilla Python 3,你可以做

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