数据处理管道python

时间:2014-06-05 01:29:04

标签: python pipeline data-processing

我正在解决以下问题。假设我在每行文件中有数据(比如图像值RGB为整数)。我想读取这些行中的10000行并制作一个帧对象(包含10000个RGB值的图像帧)并将其发送到处理管道中的下游函数。然后读取下一个10000行并创建另一个帧对象并将其发送到管道中的下游函数。

如何设置此功能,它一直在制作帧对象,直到到达文件末尾。以下是正确的方法吗?还有其他巧妙的方法吗?

class frame_object(object):
    def __init__(self):
            self.line_cnt  = 0
            self.buffer = []

    def make_frame(line):
        if(self.line_cnt < 9999):
            self.buffer.append(line)
        return self.buffer

1 个答案:

答案 0 :(得分:0)

您可以使用生成器来创建数据管道,如下例所示:

FRAME_SIZE = 10000


def gen_lines(filename):
    with open(filename, "r") as fp:
        for line in fp:
            yield line[:-1]


def gen_frames(lines):
    count = 0
    frame = []

    for line in lines:
        if count < FRAME_SIZE:
            frame.append(line)
            count += 1

        if count == FRAME_SIZE:
            yield frame
            frame = []
            count = 0

    if count > 0:
        yield frame


def process_frames(frames):
    for frame in frames:
        # do stuff with frame
        print len(frame)


lines = gen_lines("/path/to/input.file")
frames = gen_frames(lines)
process_frames(frames)

通过这种方式,可以更轻松地查看数据管道并挂钩不同的处理或过滤逻辑。您可以在数据处理管道here中了解有关生成器及其使用的更多信息。