# `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éthode `get_source`, c'est cette méthode qui détermine les lignes sources (si `get_source()` renvoie `None`, 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 devient `None`. 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'