linecache — 텍스트 줄에 대한 무작위 액세스¶
소스 코드: Lib/linecache.py
linecache 모듈은 단일 파일에서 여러 줄을 읽는 일반적인 상황을 캐싱을 사용하여 내부적으로 최적화하는 동시에, 파이썬 소스 파일에서 임의의 줄을 가져올 수 있도록 합니다. 또한 이 모듈은 포맷된 트레이스백에 포함할 소스 줄을 검색하는 데 traceback 모듈에 의해 사용됩니다.
tokenize.open() 함수가 파일을 여는 데 사용됩니다. 이 함수는 tokenize.detect_encoding()를 사용하여 파일의 인코딩을 가져옵니다; 인코딩 토큰이 없으면, 파일 인코딩의 기본값은 UTF-8입니다.
linecache 모듈은 다음 함수들을 정의합니다:
- linecache.getline(filename, lineno, module_globals=None)¶
filename 파일에서 lineno 줄을 가져옵니다. 이 함수는 절대 예외를 발생시키지 않을 것입니다 — 에러 시
''를 반환합니다 (발견된 줄의 줄 바꿈 문자는 포함됩니다).만약 filename 이 프리즈된 모듈(
'<frozen '으로 시작하는 경우)을 나타낸다면, module_globals 가None이 아닐 때module_globals['__file__']에서 실제 파일 이름을 얻으려고 시도합니다.filename이라는 파일이 없으면, 이 함수는 먼저 module_globals에서 PEP 302
__loader__를 확인합니다. 그런 로더가 있고get_source메서드를 정의하고 있으면, 그것이 소스 줄을 결정합니다 (get_source()가None을 반환하면,''이 반환됩니다). 마지막으로, filename이 상대 파일명이면, 모듈 검색 경로,sys.path, 에 있는 항목들에 상대적으로 검색됩니다.버전 3.14에서 변경: 프리즈된 모듈의 filename 을 지원합니다.
- linecache.checkcache(filename=None)¶
캐시의 유효성을 확인합니다. 캐시의 파일이 디스크에서 변경되었을 수 있고, 갱신된 버전이 필요하면 이 함수를 사용하십시오. filename이 생략되면, 캐시의 모든 항목을 검사합니다.
- linecache.lazycache(filename, module_globals)¶
이후 호출에서 module_globals가
None이더라도getline()을 통해 나중에 해당 줄을 가져올 수 있도록, 파일 기반이 아닌 모듈에 대한 충분한 정보를 캡처합니다. 이렇게 하면 라인이 실제로 필요할 때까지 모듈 전역을 무기한으로 들고 있지 않고도 I/O를 회피합니다.Added in version 3.5.
예제:
>>> import linecache
>>> linecache.getline(linecache.__file__, 8)
'import sys\n'