python remplacer simple backslash par double backslash

en python, j'essaie de remplacer un simple antislash ( " ") par un double antislash (""). J'ai le code suivant:

directory = string.replace("C:UsersJoshDesktop130216", "", "")

cependant, cela donne un message d'erreur disant qu'il n'aime pas le double backslash. Quelqu'un peut-il aider?

28
demandé sur Ashwini Chaudhary 2013-06-26 21:56:37

9 réponses

pas besoin d'utiliser str.replace ou string.replace ici, convertissez simplement cette chaîne en une chaîne brute:

>>> strs = r"C:\Users\Josh\Desktop130216"
           ^
           |
       notice the 'r'

ci-dessous est la version repr de la chaîne ci-dessus, c'est pourquoi vous voyez \ ici. Mais, en fait la chaîne actuelle contient juste '\' pas \ .

>>> strs
'C:\Users\Josh\Desktop\20130216'

>>> s = r"f\o"
>>> s            #repr representation
'f\o'
>>> len(s)   #length is 3, as there's only one `'\'`
3

mais quand vous allez imprimer cette chaîne, vous n'obtiendrez pas '\' dans la sortie.

>>> print strs
C:\Users\Josh\Desktop130216

si vous voulez que la chaîne montre '\' pendant print alors utilisez str.replace :

>>> new_strs = strs.replace('\','\\')
>>> print new_strs
C:\Users\Josh\Desktop\20130216

repr version afche \\ :

>>> new_strs
'C:\\Users\\Josh\\Desktop\\20130216'
35
répondu Ashwini Chaudhary 2013-06-26 18:26:29

que ce soit simple et clair. Permet d'utiliser le module re en python pour échapper les caractères spéciaux.

script Python :

import re
s = "C:\Users\Josh\Desktop"
print s
print re.escape(s)

sortie:

C:\Users\Josh\Desktop
C:\Users\Josh\Desktop

explication:

maintenant observer que re.escape fonction sur échapper aux caractères spéciaux dans la chaîne donnée que nous pouvons ajouter une autre antislash avant chaque antislash, et finalement la sortie résulte en une double antislash, la sortie désirée.

J'espère que cela vous aidera.

9
répondu Rewanth Cool 2016-10-04 18:36:43

utilisez les caractères d'échappement: "full\path\here" , "\" et "\\"

8
répondu alexpinho98 2013-06-26 18:18:47

en python \ (backslash) est utilisé comme un caractère d'évasion. Ce que cela signifie que dans les endroits où vous souhaitez insérer un caractère spécial (comme newline), vous utiliserez l'antislash et un autre caractère ( \n pour newline)

avec votre exemple sting vous remarquerez que lorsque vous mettez "C:\Users\Josh\Desktop130216" dans la réponse vous obtiendrez "C:\Users\Josh\Desktop\x8130216" . C'est parce que a un sens particulier dans une piqûre de python. Si vous souhaitez spécifier \ alors vous devez mettre deux \ dans votre chaîne.

"C:\Users\Josh\Desktop\28130216"

l'autre option est de notifier python que votre dard entier ne doit pas utiliser \ comme un caractère d'échappement en pré-attendant la dard avec r

r"C:\Users\Josh\Desktop130216"

c'est une chaîne "brute", et très utile dans les situations où vous avez besoin d'utiliser beaucoup de backslashs comme avec l'expression régulière piqûre.

dans le cas où vous souhaitez encore remplacer ce simple \ par \ vous utiliserez alors:

directory = string.replace(r"C:\Users\Josh\Desktop130216", "\", "\\")

Notice que je n'utilise pas r' dans les deux dernières piqûres ci-dessus. C'est parce que, lorsque vous utilisez la forme r' des piqûres vous ne pouvez pas terminer cette chaîne avec un seul \

Pourquoi pas Python raw la chaîne se termine par un simple revers?

https://pythonconquerstheuniverse.wordpress.com/2008/06/04/gotcha-%E2%80%94-backslashes-are-escape-characters /

3
répondu RFVenter 2017-05-23 11:33:24

Peut-être une erreur de syntaxe dans votre cas, vous pouvez changer la ligne en:

directory = str(r"C:\Users\Josh\Desktop130216").replace('\','\\')

qui vous donnent la sortie droite suivante:

C:\Users\Josh\Desktop\20130216
0
répondu A STEFANI 2016-09-27 23:01:46

étant donné la chaîne source, manipulation avec os.le chemin pourrait avoir plus de sens, Mais voici une solution de chaîne de caractères;

>>> s=r"C:\Users\Josh\Desktop\20130216"
>>> '\\'.join(filter(bool, s.split('\')))
'C:\\Users\\Josh\\Desktop\\20130216'

notez que split traite le \ dans la chaîne source comme une chaîne vide délimitée. L'utilisation de filter permet de se débarrasser de ces chaînes vides pour que join ne double pas les retours de cordes déjà doublés. Malheureusement, si vous avez 3 ou plus, ils sont réduits à double backslashs, mais je ne pense pas que cela vous blesse dans une expression windows path.

0
répondu CAB 2016-09-30 15:24:21

la barre oblique indique un caractère d'échappement spécial. Par conséquent, directory = path_to_directory.replace("\", "\") pousserait Python à penser que le premier argument à remplacer ne s'arrêtait pas avant la citation de départ du second argument puisqu'il comprenait la citation de fin comme un caractère d'échappement.

directory=path_to_directory.replace("\","\\")
0
répondu abacles 2016-10-01 03:15:32

, Vous pourriez utiliser

os.path.abspath(path_with_backlash)

il retourne le chemin avec \

0
répondu AHRG 2018-09-26 01:16:40

utiliser:

string.replace(r"C:\Users\Josh\Desktop130216", "\", "\")

échapper au caractère \ .

-2
répondu rocker_raj 2013-06-26 18:05:05