2
votes

Comment supprimer le caractère d'échappement (\) d'une liste en python?

Je veux supprimer le "\" supplémentaire d'une liste de chaînes en python.

Par exemple, si ma liste est la suivante:

whole list :  ['a', 'b', '{word}\\*', 'd']

cela devrait être ceci:

C:\Users\Elcot>python test.py
val :  a
val :  b
val :  {word}\\*
val :  d
whole list :  ['a', 'b', '{word}\\\\*', 'd']

Si je parcours cette liste tout en imprimant chaque chaîne séparément, je peux obtenir la chaîne "{word} \ *".

Pendant ce temps, lors de l'impression de cette liste complète, elle apparaît sous la forme:

import re
cmd = ['a', 'b', '{word}\\\\*', 'd']
for i in cmd:
    print("val : ", i)
print("whole list : ", cmd)

Programme:

['a', 'b', '{word}\\\\*', 'd']


1 commentaires

L'impression d'une liste utilise le repr () de ses éléments. Le repr () d'une chaîne avec une barre oblique inverse doublera cette barre oblique inverse, pour faire du résultat un littéral de chaîne Python syntaxiquement valide. En d'autres termes, il n'y a pas de \ supplémentaire dans votre liste , c'est purement un problème d'affichage. Si vous voulez afficher la liste sans traitement supplémentaire des éléments, vous devez l'écrire vous-même - "," .join (cmd) serait un bon point de départ.


3 Réponses :


0
votes

Je crois que vous recherchez str.rstrip () qui supprime la dernière instance du caractère et renvoie une copie de la chaîne résultante

https://docs.python.org/3.6/library/stdtypes.html#str.rstrip

Donc, parcourir en boucle votre liste de chaînes une par une

for i in range(len(cmd)):
    cmd[i] = cmd[i].rstrip('\\')

Devrait supprimer le dernier caractère «\» de chacune de vos chaînes dans votre liste de chaînes.


0 commentaires

0
votes

Vous pouvez convertir la chaîne en octets, puis utiliser la méthode bytes.decode avec unicode_escape comme encodage pour dé-échapper une chaîne donnée:

cmd = [bytes(s, 'utf-8').decode('unicode_escape') for s in cmd]


0 commentaires

0
votes

Si vous avez vraiment affaire à une instruction d'affectation, vous devez connaître chaînes brutes en Python. Un littéral de chaîne brute utilise le préfixe r comme ceci:

rstr = r"raw string"
regex = r"\(.*\)"

Le but des chaînes brutes est de réduire la quantité d'échappements nécessaires lors de l'utilisation de barres obliques inverses; il est destiné à être utilisé avec d'autres moteurs de traitement (comme les chemins Windows ou les expressions régulières) où le moteur de traitement va faire sa propre gestion de la barre oblique inverse. Il y a beaucoup moins de séquences d'échappement dans les chaînes brutes.

Votre exemple de 'mot \\\\ *' serait normalement converti en mot \\ * code > par le mécanisme d'échappement de la barre oblique inverse. Si vous voulez une chaîne avec exactement trois barres obliques inverses, vous pouvez dire r'word\\\*'.


1 commentaires

J'ai déjà essayé cela. Mais cela fonctionne maintenant comme prévu. Mon résultat attendu est "['a', 'b', '{word} \\ *', 'd']". Mais en imprimant ceci à partir du code python, nous obtiendrons "['a', 'b', '{word} \\\\ *', 'd']" (Ajout de deux barres obliques supplémentaires).