Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 linecache 모듈로 텍스트 파일 줄에 임의 접근하기

파이썬 표준 라이브러리의 linecache 모듈은 텍스트 파일의 특정 줄에 임의로 접근할 수 있도록 도와주는 기능을 제공합니다. 이 모듈은 파이썬의 traceback 모듈이 오류 추적 스택(traceback)을 생성할 때 내부적으로 광범위하게 사용되기도 합니다. linecache는 한 번 읽은 파일의 내용을 캐시(cache)에 저장해 두기 때문에 같은 줄을 반복해서 읽을 때 시간을 크게 절약할 수 있습니다.

linecache 모듈의 주요 함수

이 모듈에서 가장 중요한 함수는 지정한 파일에서 특정 줄 번호를 읽어오는 getline()입니다. 그 외에도 다음과 같은 함수들이 제공됩니다.

getline(file, x)

파일에서 x번째 줄을 반환합니다. 해당 줄이 존재하지 않으면 빈 문자열을 반환합니다. 만약 파일이 현재 경로에 없다면, 함수는 sys.path(모듈 검색 경로)에 포함된 디렉터리에서 파일을 찾으려고 시도합니다.

clearcache()

이전에 getline() 호출로 저장된 캐시가 더 이상 필요하지 않다면, 이 함수를 사용해 캐시를 비울 수 있습니다.

checkcache()

캐시의 유효성을 검사하는 함수입니다. 캐시에 저장된 파일이 디스크에서 변경되었을 가능성이 있을 때 유용하게 사용됩니다.

lazycache(filename, module_globals)

module_globals 정보를 바탕으로 해당 파일 이름에 대한 캐시를 미리 준비(seed)합니다. 실제 소스는 getlines()가 호출되는 시점에 모듈 로더에게 요청되며, 즉시 로드되지 않습니다.

getlines(filename)

파일의 전체 줄을 리스트(list) 객체 형태로 반환합니다.

updatecache(filename, module_globals)

캐시 항목을 갱신하고 줄들의 리스트를 반환합니다.

사용 예제: Zen of Python 읽기

linecache의 활용 방법을 살펴보기 위해 먼저 예제용 텍스트 파일을 만들겠습니다. 여기서는 파이썬 설계 철학에 영향을 준 소프트웨어 원칙 목록인 'Zen of Python'을 사용합니다. 다음 코드는 'import this'의 출력 결과를 zen.txt 파일로 저장합니다.

import sys, io
zen = io.StringIO()
old_stdout = sys.stdout
sys.stdout = zen
import this
sys.stdout = old_stdout
f = open('zen.txt', 'w')
f.write(zen.getvalue())
f.close()

위 코드를 실행하면 현재 디렉터리에 zen.txt 파일이 생성됩니다. 이제 이 텍스트 파일에서 getline() 함수를 사용해 원하는 줄을 읽어 보겠습니다.

4번째 줄 읽기

>>> import linecache
>>> linecache.getline('zen.txt', 4)
'Explicit is better than implicit.\n'

반환된 문자열이 줄바꿈 문자(\n)로 끝난다는 점에 유의하세요.

4번째부터 10번째까지 줄 출력하기

getlines() 함수가 반환한 리스트에 슬라이스 연산자를 적용하면 여러 줄을 한 번에 가져올 수 있습니다.

>>> linecache.getlines('zen.txt')[4:10]
['Simple is better than complex.\n', 'Complex is better than complicated.\n', 'Flat is better than nested.\n', 'Sparse is better than dense.\n', 'Readability counts.\n', "Special cases aren't special enough to break the rules.\n"]

이 글에서는 파이썬 표준 라이브러리의 linecache 모듈에 대해 살펴보았습니다. 텍스트 파일의 특정 줄에 반복적으로 접근해야 하는 상황이라면 linecache를 활용해 성능과 코드 가독성을 동시에 개선할 수 있습니다.