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).Se um arquivo chamado filename não for encontrado, a função primeiro verifica por um
__loader__
da PEP 302 em module_globals. Se existe um carregador e ele define um métodoget_source
, isso determina as linhas fonte (seget_source()
retornarNone
, então''
será retornado). Por fim, se filename for um nome de arquivo relativo, ele será procurado em relação às entradas no caminho de pesquisa do módulo,sys.path
.
-
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 forNone
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'