linecache
— Accès direct aux lignes d'un texte¶
Code source : Lib/linecache.py
Le module linecache
permet d'obtenir n'importe quelle ligne d'un fichier source Python. Le cas classique où de nombreuses lignes sont accédées est optimisé en utilisant un cache interne. C'est utilisé par le module traceback
pour récupérer les lignes à afficher dans les piles d'appels.
Les fichiers sont ouverts par la fonction tokenize.open()
. Cette fonction utilise tokenize.detect_encoding()
pour obtenir l'encodage du fichier. En l'absence d'un BOM et d'un cookie d'encodage, c'est l'encodage UTF-8 qui sera utilisé.
Le module linecache
définit les fonctions suivantes :
-
linecache.
getline
(filename, lineno, module_globals=None)¶ Récupère la ligne lineno du fichier filename. Cette fonction ne lèvera jamais d'exception, elle préfèrera renvoyer
''
en cas d'erreur (le caractère de retour à la ligne sera inclus pour les lignes existantes).Si le fichier filename n'existe pas, cette fonction vérifie d'abord la présence d'un chargeur
__loader__
dans module_globals, comme le prescrit la PEP 302. Si un chargeur est trouvé avec une méthodeget_source
, c'est cette méthode qui détermine les lignes sources (siget_source()
renvoieNone
, cette valeur est remplacée par la chaîne vide''
). Sinon, si le nom de fichier filename est relatif, il est recherché dans les dossiers du chemin de recherche des modules,sys.path
.
-
linecache.
clearcache
()¶ Nettoie le cache. Utilisez cette fonction si vous n'avez plus besoin des lignes des fichiers précédemment lus via
getline()
.
-
linecache.
checkcache
(filename=None)¶ Vérifie la validité du cache. Utilisez cette fonction si les fichiers du cache pourraient avoir changé sur le disque, et que vous en voudriez une version à jour. Sans filename, toutes les entrées du cache seront vérifiées.
-
linecache.
lazycache
(filename, module_globals)¶ Récupère suffisamment d'informations sur un module situé hors du système de fichiers pour récupérer ses lignes plus tard via
getline()
, même si module_globals devientNone
. Cela évite de lire le fichier avant d'avoir besoin d'une ligne, tout en évitant de conserver les globales du module indéfiniment.Nouveau dans la version 3.5.
Exemple :
>>> import linecache
>>> linecache.getline(linecache.__file__, 8)
'import sys\n'