개발 이야기/파이썬

[파이썬] 제너레이터를 활용한 효율적인 텍스트 처리 방법

AI 동키 2024. 4. 15. 18:44
반응형

안녕하세요! 오늘은 파이썬에서 제너레이터를 사용하여 텍스트를 효율적으로 처리하는 방법에 대해 알아보겠습니다. 

제너레이터는 큰 텍스트 데이터를 다룰 때 메모리 사용량을 줄이고 성능을 향상시킬 수 있는 유용한 도구랍니다.

제너레이터란?

제너레이터는 파이썬에서 반복 가능한 객체를 생성하는 함수입니다. 일반적인 함수는 값을 반환하고 종료되지만, 제너레이터 함수는 yield 키워드로 값을 반환하고 함수의 상태를 유지합니다. 이를 통해 필요한 값만 그때그때 생성하므로 메모리 효율성이 높아집니다.

제너레이터 활용 예제

def sample():
    yield "서울은"
    yield "대한민국의"
    yield "수도"
    yield "입니다."

# (a) 간단한 join 연산자 사용
text = ''.join(sample())
print(text)

# (b) 텍스트 부분을 I/O로 리디렉션
import sys
for part in sample():
    sys.stdout.write(part)
sys.stdout.write('\n')

# (c) 텍스트 부분을 버퍼에 결합하여 큰 I/O 작업 수행
def combine(source, maxsize):
    parts = []
    size = 0
    for part in source:
        parts.append(part)
        size += len(part)
        if size > maxsize:
            yield ''.join(parts)
            parts = []
            size = 0
    yield ''.join(parts)

for part in combine(sample(), 32768):
    sys.stdout.write(part)
sys.stdout.write('\n')

 

위 예제에서는 sample() 제너레이터 함수를 정의하였습니다. 이 함수는 텍스트 부분을 순차적으로 반환합니다.


(a) 부분에서는 join() 메서드를 사용하여 제너레이터에서 반환된 텍스트 부분을 하나의 문자열로 결합합니다.

(b) 부분에서는 제너레이터에서 반환된 각 텍스트 부분을 표준 출력(stdout)에 직접 씁니다.

(c) 부분에서는 combine() 함수를 사용하여 제너레이터에서 반환된 텍스트 부분을 버퍼에 결합하고, 버퍼 크기가 maxsize를 초과하면 버퍼를 비우고 출력합니다. 이를 통해 큰 텍스트 데이터를 효율적으로 처리할 수 있습니다.


제너레이터의 장점

  • 메모리 효율성: 제너레이터는 전체 텍스트를 한 번에 메모리에 로드하지 않고, 필요한 부분만 그때그때 생성하므로 메모리 사용량을 줄일 수 있습니다.
  • 지연 평가(Lazy Evaluation): 제너레이터는 값이 실제로 필요할 때까지 계산을 지연시킵니다. 이를 통해 불필요한 연산을 피할 수 있습니다.
  • 코드 가독성 및 유지보수성: 제너레이터를 사용하면 코드가 간결해지고 가독성이 향상됩니다. 또한, 텍스트 처리 로직을 분리할 수 있어 코드의 유지보수성이 좋아집니다.


마무리

제너레이터는 파이썬에서 텍스트 처리 작업을 효율적으로 수행하는 데 유용한 도구입니다. 메모리 사용량을 최소화하고, 코드의 가독성을 높일 수 있습니다. 큰 텍스트 데이터를 다룰 때 제너레이터를 활용해 보시기 바랍니다.

오늘도 좋은 하루 보내세요!

#파이썬제너레이터 #텍스트처리 #메모리효율성 #지연평가 #코드가독성 #파이썬예제 #파이썬강좌 #프로그래밍팁 #파이썬활용 #대용량데이터처리

반응형