for문을 돌거나 다른 반복 처리중 보이는 마지막 몇가지 항목을 유지하고 싶다면 어떻게 할까?


그렇다면 collections 모듈에 deque를 import해서 사용하면 된다.


아래의 코드는 특정 텍스트를 인자로 던져주면 해당 특정 텍스트를 파일에서 찾게되면,


해당라인의 전 history 라인만큼 리턴해주는 Python 코드이다


from collections import deque

def search(lines, pattern, history=5):
    previous_lines = deque(maxlen=history)
    for line in lines:
        if pattern in line:
            yield line, previous_lines
        previous_lines.append(line)

# Example use on a file
if __name__ == '__main__':
    with open('somefile.txt') as f:
        for line, prevlines in search(f, 'python', 5):
            for pline in prevlines:
                print(pline, end='')
            print(line, end='')
            print('-'*20)

어떠한 item을 검색하기 위한 코드를 작성할때는 yield를 쓰는것이 일반적이다.


Posted by C마노
,