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
:
(
pline
,
end
=
''
)
(
line
,
end
=
''
)
(
'-'
*
20
)
어떠한 item을 검색하기 위한 코드를 작성할때는 yield를 쓰는것이 일반적이다.
'Python > Python Cookbook' 카테고리의 다른 글
[Python] 임의의 길이의 요소 Unpacking (0) | 2017.02.16 |
---|---|
[Python] 변수에 시퀀스를 기준으로 압축푸는 방법 (0) | 2017.02.16 |