11.7. "glob" --- Recherche de chemins de style Unix selon certains motifs
*************************************************************************

**Code source :** Lib/glob.py

======================================================================

Le module "glob" recherche tous les chemins correspondant à un motif
particulier selon les règles utilisées par le shell Unix, les
résultats sont renvoyés dans un ordre arbitraire. Aucun remplacement
du tilde n'est réalisé, mais les caractères "*", "?", et les
caractères "[]" exprimant un intervalle sont correctement renvoyés.
Cette opération est réalisée en utilisant les fonctions "os.scandir()"
et "fnmatch.fnmatch()" de concert, et sans invoquer une sous-commande.
Notons qu'à la différence de "fnmatch.fnmatch()", "glob" traite les
noms de fichiers commençant par un point (".") comme des cas spéciaux.
(Pour remplacer le tilde et les variables shell, nous vous conseillons
d'utiliser les fonctions "os.path.expanduser()" et
"os.path.expandvars()".)

Pour une correspondance littérale, il faut entourer le métacaractère
par des crochets. Par exemple, "'[?]'" reconnaît le caractère "'?'".

Voir aussi:

  Le module "pathlib" offre une représentation objet de haut niveau
  des chemins.

glob.glob(pathname, *, recursive=False)

   Renvoie une liste, potentiellement vide, de chemins correspondant
   au motif *pathname*, qui doit être une chaîne de caractères
   contenant la spécification du chemin. *pathname* peut être soit
   absolu (comme "/usr/src/Python-1.5/Makefile") soit relatif (comme
   "../../Tools/*/*.gif"), et contenir un caractère de remplacement de
   style shell. Les liens symboliques cassés sont aussi inclus dans
   les résultats (comme pour le shell).

   Si *recursive* est vrai, le motif ""**"" reconnaît tous les
   fichiers et, zéro ou plus répertoires et sous-répertoires. Si le
   motif est suivi par un caractère de séparation "os.sep", seuls les
   répertoires et sous-répertoires sont reconnus.

   Note:

     Utiliser le motif ""**"" dans de grandes arborescences de dossier
     peut consommer une quantité de temps démesurée.

   Modifié dans la version 3.5: Gestion des chemins récursifs
   utilisant le motif  ""**"".

glob.iglob(pathname, *, recursive=False)

   Renvoie un *iterator* qui produit les mêmes valeurs que "glob()",
   sans toutes les charger en mémoire simultanément.

glob.escape(pathname)

   Échappe tous les caractères spéciaux ("'?'", "'*'" et "'['"). Cela
   est utile pour reconnaître une chaîne de caractère littérale
   arbitraire qui contiendrait ce type de caractères. Les caractères
   spéciaux dans les disques et répertoires partagés (chemins UNC) ne
   sont pas échappés, e.g. sous Windows "escape('//?/c:/Quo
   vadis?.txt')" renvoie "'//?/c:/Quo vadis[?].txt'".

   Nouveau dans la version 3.4.

Par exemple, considérons un répertoire contenant les fichiers suivants
: "1.gif", "2.txt", "card.gif" et un sous-répertoire "sub" contenant
seulement le fichier "3.txt". "glob()"  produit les résultats
suivants. Notons que les composantes principales des chemins sont
préservées.

   >>> import glob
   >>> glob.glob('./[0-9].*')
   ['./1.gif', './2.txt']
   >>> glob.glob('*.gif')
   ['1.gif', 'card.gif']
   >>> glob.glob('?.gif')
   ['1.gif']
   >>> glob.glob('**/*.txt', recursive=True)
   ['2.txt', 'sub/3.txt']
   >>> glob.glob('./**/', recursive=True)
   ['./', './sub/']

Si le répertoire contient des fichiers commençant par ".", ils ne sont
pas reconnus par défaut. Par exemple, considérons un répertoire
contenant "card.gif" et ".card.gif" :

   >>> import glob
   >>> glob.glob('*.gif')
   ['card.gif']
   >>> glob.glob('.c*')
   ['.card.gif']

Voir aussi:

  Module "fnmatch"
     Recherche de noms de fichiers de style shell (ne concerne pas les
     chemins)
