linecache
— Random access to text lines¶
Вихідний код: Lib/linecache.py
Модуль linecache
дозволяє отримати будь-який рядок із вихідного файлу Python, одночасно намагаючись оптимізувати внутрішню систему, використовуючи кеш, типовий випадок, коли багато рядків зчитується з одного файлу. Це використовується модулем traceback
для отримання вихідних рядків для включення у відформатовану трасування.
Функція tokenize.open()
використовується для відкриття файлів. Ця функція використовує tokenize.detect_encoding()
, щоб отримати кодування файлу; за відсутності маркера кодування, кодування файлу за замовчуванням — UTF-8.
Модуль linecache
визначає такі функції:
-
linecache.
getline
(filename, lineno, module_globals=None)¶ Отримати рядок lineno з файлу з назвою filename. Ця функція ніколи не викличе виняток — вона повертатиме
''
у разі помилки (кінцевий символ нового рядка буде включено для знайдених рядків).Якщо файл із назвою filename не знайдено, функція спочатку перевіряє наявність PEP 302
__loader__
у module_globals. Якщо такий завантажувач існує і він визначає метод get_source, то він визначає вихідні рядки (якщо get_source() повертає None, тоді повертається''
). Нарешті, якщо filename є відносною назвою файлу, вона шукається відносно записів у шляху пошуку модуля,sys.path
.
-
linecache.
clearcache
()¶ Очистити кеш. Використовуйте цю функцію, якщо вам більше не потрібні рядки з файлів, які раніше були прочитані за допомогою
getline()
.
-
linecache.
checkcache
(filename=None)¶ Перевірте кеш на дійсність. Використовуйте цю функцію, якщо файли в кеші могли змінитися на диску, і вам потрібна оновлена версія. Якщо ім’я файлу опущено, буде перевірено всі записи в кеші.
-
linecache.
lazycache
(filename, module_globals)¶ Зберіть достатньо деталей про нефайловий модуль, щоб дозволити отримати його рядки пізніше через
getline()
, навіть якщо module_globals має значенняNone
у наступному виклику. Це дозволяє уникнути введення/виведення, доки рядок дійсно не знадобиться, без необхідності носити глобальні модулі безкінечно.Нове в версії 3.5.
Приклад:
>>> import linecache
>>> linecache.getline(linecache.__file__, 8)
'import sys\n'