我正在解决以下问题。假设我在每行文件中有数据(比如图像值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
答案 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中了解有关生成器及其使用的更多信息。