linecache
— Acceso aleatorio a líneas de texto¶
Código fuente: Lib/linecache.py
El módulo linecache
permite obtener cualquier línea de un archivo fuente Python, mientras se intenta optimizar internamente, usando una caché, el caso común en el que se leen muchas líneas de un solo archivo. Esto es utilizado por el módulo traceback
para recuperar líneas de código fuente para incluirlas en el seguimiento de pila formateado.
La función tokenize.open()
se utiliza para abrir archivos. Esta función usa tokenize.detect_encoding()
para obtener la codificación del archivo; en la ausencia de un token de codificación, la codificación del archivo es por defecto UTF-8.
El módulo linecache
define las siguientes funciones:
- linecache.getline(filename, lineno, module_globals=None)¶
Obtiene la línea lineno del archivo llamado filename. Esta función nunca lanzará una excepción — retornará
''
en los errores (el carácter de la nueva línea de terminación se incluirá para las líneas que se encuentren).Si un archivo llamado filename no se encuentra, la función primero verifica un
__loader__
en module_globals PEP 302. Si existe tal cargador y define un métodoget_source
, entonces eso determina las líneas de origen (siget_source()
retornaNone
, entonces se retorna''
). Finalmente, si filename es un nombre de fichero relativo, se busca en relación a las entradas en la ruta de búsqueda del módulo,sys.path
.
- linecache.clearcache()¶
Borra el caché. Use esta función si ya no necesita las líneas de archivos leídos previamente usando
getline()
.
- linecache.checkcache(filename=None)¶
Comprueba la validez de la caché. Use esta función si los archivos de la caché pueden haber cambiado en disco y necesita la versión actualizada. Si se omite filename, comprobará todas las entradas en la caché.
- linecache.lazycache(filename, module_globals)¶
Captura suficientes detalles sobre un módulo no basado en archivos para permitir obtener sus líneas más tarde a través de
getline()
incluso si module_globals esNone
en la llamada posterior. Esto evita hacer E/S hasta que una línea es realmente necesaria, sin tener que llevar los módulo globales indefinidamente.Nuevo en la versión 3.5.
Ejemplo:
>>> import linecache
>>> linecache.getline(linecache.__file__, 8)
'import sys\n'