2014-06-05 2 views
0

다음 문제에 대한 작업을하고 있습니다. 한 줄에 하나의 파일에 데이터 (이미지 값 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

감사합니다. 편집 해 주셔서 감사합니다. – kaaliakahn

답변

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에서 발전기와 그 사용에 대해 자세히 배울 수 있습니다.