Python 数据处理管道
我正在处理一个问题。假设我有一些数据(比如每行都是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)
这样一来,你就能更清楚地看到数据处理的流程,并且可以在其中加入不同的处理或过滤逻辑。如果你想了解更多关于生成器以及它们在数据处理流程中的用法,可以点击这里。