"glob" — Recherche de chemins de style Unix selon certains motifs
*****************************************************************

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

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

The "glob" module finds all the pathnames matching a specified pattern
according to the rules used by the Unix shell, although results are
returned in arbitrary order.  No tilde expansion is done, but "*",
"?", and character ranges expressed with "[]" will be correctly
matched.  This is done by using the "os.scandir()" and
"fnmatch.fnmatch()" functions in concert, and not by actually invoking
a subshell.

Note that files beginning with a dot (".") can only be matched by
patterns that also start with a dot, unlike "fnmatch.fnmatch()" or
"pathlib.Path.glob()". (For tilde and shell variable expansion, use
"os.path.expanduser()" and "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, *, root_dir=None, dir_fd=None, recursive=False)

   Return a possibly empty list of path names that match *pathname*,
   which must be a string containing a path specification. *pathname*
   can be either absolute (like "/usr/src/Python-1.5/Makefile") or
   relative (like "../../Tools/*/*.gif"), and can contain shell-style
   wildcards. Broken symlinks are included in the results (as in the
   shell). Whether or not the results are sorted depends on the file
   system.  If a file that satisfies conditions is removed or added
   during the call of this function, whether a path name for that file
   be included is unspecified.

   Si *root_dir* n'est pas "None", cela doit être un *objet simili-
   chemin* spécifiant le dossier racine de la recherche.  Cela a le
   même effet sur "glob()" que de changer le dossier courant avant
   l'appel de la fonction.  Si *pathname* est relatif, les chemins du
   résultat seront relatifs au *root_dir* .

   Cette fonction prend en charge les chemins relatifs aux
   descripteurs de dossier avec le paramètre *dir_fd*.

   Si *recursive* est vrai, le motif ""**"" reconnaît tous les
   fichiers, aucun ou plusieurs répertoires, sous-répertoires et liens
   symboliques aux répertoires. Si le motif est suivi par "os.sep" ou
   "os.altsep" alors les fichiers ne sont pas inclus dans le résultat.

   Lève un évènement d'audit "glob.glob" avec les arguments
   "pathname", "recursive".

   Lève un évènement d'audit "glob.glob/2" avec les arguments
   "pathname", "recursive", "root_dir", "dir_fd".

   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: Prise en charge des chemins récursifs
   utilisant le motif  ""**"".

   Modifié dans la version 3.10: Paramètres *root_dir* et *dir_fd*
   ajoutés.

glob.iglob(pathname, *, root_dir=None, dir_fd=None, recursive=False)

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

   Lève un évènement d'audit "glob.glob" avec les arguments
   "pathname", "recursive".

   Lève un évènement d'audit "glob.glob/2" avec les arguments
   "pathname", "recursive", "root_dir", "dir_fd".

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

   Modifié dans la version 3.10: Paramètres *root_dir* et *dir_fd*
   ajoutés.

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)
