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?
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'
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.
utilisez les caractères d'échappement: "full\path\here"
, "\"
et "\\"
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?
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
é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.
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("\","\\")
, Vous pourriez utiliser
os.path.abspath(path_with_backlash)
il retourne le chemin avec \
utiliser:
string.replace(r"C:\Users\Josh\Desktop130216", "\", "\")
échapper au caractère \
.