81 votes

Enlever le dernier caractère s'il s'agit d'un backslash

Existe-t-il une fonction pour supprimer le dernier caractère de la chaîne s'il s'agit d'un caractère spécial ? Par exemple, j'ai besoin de supprimer le backslash s'il est présent, et de ne rien faire s'il ne l'est pas. Je sais que je peux le faire facilement avec une expression régulière, mais je me demande s'il existe une petite fonction intégrée pour cela.

1 votes

Et s'il y a plusieurs barres obliques à la fin de la chaîne? Les retirer toutes?

1 votes

Vous avez déjà de bonnes réponses. Si votre question vient du besoin de créer un nom de fichier approprié dans le système de fichiers, alors os.path.join (docs.python.org/library/os.path.html#os.path.join) est utile.

147voto

FogleBird Points 23405

Utilisez rstrip pour supprimer le(s) caractère(s) spécifié(s) du côté droit de la chaîne.

my_string = my_string.rstrip('\\')

Voir : http://docs.python.org/library/stdtypes.html#str.rstrip

15 votes

...et il supprimera plus d'un caractère s'il y a plus d'un backslash à la fin de la chaîne.

0 votes

@Tim: Bon point... Je suppose que l'OP devrait clarifier (d'après ce que j'ai compris, cela devrait supprimer tous les "caractères spéciaux").

7 votes

Si cela concerne la normalisation des noms de chemins, la manière OS-neutre de le faire est d'utiliser strip comme indiqué ci-dessus, mais le caractère à retirer est os.sep -- c'est le backslash pour Windows, le slash pour Unix.

28voto

Adam Batkin Points 20920

Si vous ne vous dérangez pas que tous les barres obliques finales soient supprimées, vous pouvez utiliser string.rstrip()

Par exemple:

x = '\\abc\\'
print x.rstrip('\\')

affiche:

\abc

Mais il y a un léger problème avec cela (basé sur la façon dont votre question est formulée): Cela supprimera TOUTES les barres obliques finales. Si vous voulez vraiment seulement que le DERNIER caractère soit supprimé, vous pouvez faire quelque chose comme ceci:

if x[-1] == '\\': x = x[:-1]

11voto

Rob Cowie Points 10471

Si vous voulez uniquement supprimer un backslash en cas de plusieurs, faites quelque chose comme :

s = s[:-1] if s.endswith('\\') else s

7voto

Matt Joiner Points 29194
si s.endswith('\\'):
    s = s[:-1]

1 votes

Avez-vous essayé ceci? C'est une erreur de syntaxe. Vous devez utiliser if s.endswith('\\')

1 votes

Sérieusement, je tombe là-dessus à chaque fois. Quel est l'intérêt des chaînes brutes si elles ne fonctionnent pas comme prévu.

6voto

EdoDodo Points 5480

La fonction rstrip supprimera plus que le dernier caractère, bien que. Elle supprimera toutes les barres obliques inverses à la fin de la chaîne. Voici une simple instruction if qui supprimera juste le dernier caractère:

if s[-1] == '\\':
    s = s[:-1]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X