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'
