# 11.9. `linecache` — Acesso aleatório a linhas de texto

Código Fonte: Lib/linecache.py

O módulo `linecache` permite obter qualquer linha de um arquivo fonte Python, enquanto tenta otimizar internamente, usando um cache, o caso comum em que muitas linhas são lidas em um único arquivo. Isso é usado pelo módulo `traceback` para recuperar as linhas de origem para inclusão no traceback (situação da pilha de execução) formatado.

A função `tokenize.open()` é usada para abrir arquivos. Esta função usa `tokenize.detect_encoding()` para obter a codificação do arquivo; na ausência de um token de codificação, o padrão de codificação do arquivo é UTF-8.

O módulo `linecache` define as seguintes funções:

`linecache.``getline`(filename, lineno, module_globals=None)

  Obtém a linha lineno do arquivo chamado filename. Essa função nunca levanta uma exceção — ela retornará `''` em erros (o caractere de nova linha final será incluído para as linhas encontradas).

  If a file named filename is not found, the function will look for it in the module search path, `sys.path`, after first checking for a PEP 302 `__loader__` in module_globals, in case the module was imported from a zipfile or other non-filesystem import source.

`linecache.``clearcache`()

  Limpa o cache. Use esta função se você não precisar mais de linhas de arquivos lidos anteriormente usando `getline()`.

`linecache.``checkcache`(filename=None)

  Verifica a validade do cache. Use esta função se os arquivos no cache tiverem sido alterados no disco e você precisar da versão atualizada. Se filename for omitido, ele verificará todas as entradas no cache.

`linecache.``lazycache`(filename, module_globals)

  Captura detalhes suficientes sobre um módulo não baseado em arquivo para permitir obter suas linhas posteriormente via `getline()` mesmo se module_globals for `None` na chamada posterior. Isso evita a execução de E/S até que uma linha seja realmente necessária, sem ter que carregar o módulo global indefinidamente.

  Novo na versão 3.5.

Exemplo:

    >>> import linecache
    >>> linecache.getline(linecache.__file__, 8)
    'import sys\n'