Recherche de texte au début ou à la fin d’une chaîne de caractères

Une façon simple de vérifier si une chaîne de caractères particulières coïncide avec le début ou la fin d’une autre chaîne de caractères en Python est d’utiliser les méthodes str.startswith() ou str.endswith().

Donc, si vous avez besoin de contrôler le début ou la fin d’une chaîne de caractères pour des motifs de texte spécifiques, tels que les extensions de nom de fichier, les schémas URL, etc. Alors vous devez utiliser les méthodes citées ci-dessous. Par exemple:

>>> nomdefichier = 'spam.txt'

>>> nomdefichier.endswith('.txt')
True

>>> nomdefichier.startswith('fichier:')
False

>>> url = 'http://www.python.org'

>>> url.startswith('http:')
True

>>>

Si vous avez besoin de vérifier selon des choix multiples, fournissez simplement un tuple de possibilités pour startswith() ou endswith(). Dans l’exemple ci-dessous, on a utilisé le module os qui permet de gérer les fichiers et les dossiers.

>>> import os
>>> nomsdefichier = os.listdir('.')

>>> nomsdefichier
['cache.c', 'eclipse.h', 'idlerc.h', '.matplotlib', 'node_repl_history.txt', 'href.py', 'Templates', 'test.txt', 'test2.txt', 'Videos.c']

>>> [nom for nom in nomsdefichier if nom.endswith(('.c', '.h')) ]
['cache.c', 'eclipse.h', 'idlerc.h', 'Videos.c']

>>> any(nom.endswith('.py') for nom in nomsdefichier)
True

>>> any(nom.endswith('.docx') for nom in nomsdefichier)
False

>>>

Voici un autre exemple de fonction permettant de lire des données via URL ou via un chemin de fichier:

from urllib.request import urlopen
def lire_donnees(url):
   if url.startswith(('http:', 'https:', 'ftp:')):
      return urlopen(url).read()
   else:
      with open(url) as f:
         return f.read()

Il est étrange de constater qu’il s’agit d’une partie de Python où un tuple est en fait requis comme entrée. Si vous avez les choix spécifiés dans une liste ou un ensemble, assurez-vous de les convertir en utilisant tuple() en premier. Par exemple :

>>> choix = ['http:', 'ftp:']

>>> url = 'http://www.python.org'

>>> url.startswith(choix)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: startswith first arg must be str or a tuple of str, not list

>>> url.startswith(tuple(choix))
True

>>>

Les méthodes startswith() et endswith() fournissent un moyen très pratique pour la vérification des préfixes et suffixes de base. Des opérations similaires peuvent être effectuées avec des tranches (slices), mais sont beaucoup moins élégantes. Par exemple:

>>> url.startswith(tuple(choix))
True

>>> nomdefichier = 'spam.txt'

>>> nomdefichier[-4:] == '.txt'
True

>>> url = 'http://www.python.org'
>>> url[:5] == 'http:' or url[:6] == 'https:' or url[:4] == 'ftp:'
True

>>>

Vous pourriez également être intéressé à utiliser des expressions régulières comme alternative. Par exemple:

>>> import re
>>> url = 'http://www.python.org'
>>> re.match('http:|https:|ftp:', url)
<re.Match object; span=(0, 5), match='http:'>

>>>

Cela fonctionne, mais c’est souvent exagéré pour une correspondance simple. L’utilisation de cette recette est plus simple et plus rapide.

Enfin, les méthodes startswith() et endswith() sont très jolies lorsqu’elles sont combinées avec d’autres opérations, telles que des réductions de données communes. Par exemple, cette instruction qui vérifie la présence de certains types de fichiers dans un répertoire:

if any(nom.endswith(('.c', '.h')) for nom in listdir(nomderepertoire)):
   ...

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here