Python 数据处理管道

0 投票
1 回答
2848 浏览
提问于 2025-04-18 08:39

我正在处理一个问题。假设我有一些数据(比如每行都是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

你可以使用生成器来创建一个数据处理流程,像下面这个例子:

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)

这样一来,你就能更清楚地看到数据处理的流程,并且可以在其中加入不同的处理或过滤逻辑。如果你想了解更多关于生成器以及它们在数据处理流程中的用法,可以点击这里

撰写回答