簡體   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