繁体   English   中英

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

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

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

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

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

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)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM