En python, j'essaie de remplacer une simple barre oblique inverse ("\") par une double barre oblique inverse ("\"). J'ai le code suivant:
directory = string.replace("C:\Users\Josh\Desktop\20130216", "\", "\\")
Cependant, cela donne un message d'erreur indiquant qu'il n'aime pas la double barre oblique inversée. Quelqu'un peut-il aider?
Inutile d'utiliser str.replace
ou string.replace
ici, il suffit de convertir cette chaîne en chaîne brute:
>>> strs = r"C:\Users\Josh\Desktop\20130216"
^
|
notice the 'r'
Ci-dessous la version repr
de la chaîne ci-dessus, vous voyez donc \\
ici . Mais en fait, la chaîne actuelle contient juste '\'
et non \\
.
>>> 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 lorsque vous imprimerez cette chaîne, vous n'obtiendrez pas '\\'
dans le résultat.
>>> print strs
C:\Users\Josh\Desktop\20130216
Si vous voulez que la chaîne affiche '\\'
pendant print
, utilisez str.replace
:
>>> new_strs = strs.replace('\\','\\\\')
>>> print new_strs
C:\\Users\\Josh\\Desktop\\20130216
La version repr
affichera maintenant \\\\
:
>>> new_strs
'C:\\\\Users\\\\Josh\\\\Desktop\\\\20130216'
Laissez-moi rendre les choses simples et claires. Utilisons le module re en python pour échapper aux 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, observez que re-évaporer Pour échapper aux caractères spéciaux de la chaîne donnée, nous pouvons ajouter une autre barre oblique inverse avant chaque barre oblique inversée. Enfin, la sortie produit une double barre oblique inverse, la sortie souhaitée.
J'espère que cela vous aide.
Utilisez des caractères d'échappement: "full\\path\\here"
, "\\"
et "\\\\"
Étant donné la chaîne source, une manipulation avec os.path pourrait sembler plus logique, mais voici une solution de chaîne;
>>> 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 en tant que chaîne vide délimitée. Utiliser filter
supprime ces chaînes vides afin que join
ne double pas les barres obliques inverses déjà doublées. Malheureusement, si vous en avez 3 ou plus, ils sont réduits à une double barre oblique inversée, mais je ne pense pas que cela vous blesse dans une expression du chemin Windows.
La barre oblique inverse indique un caractère d'échappement spécial. Par conséquent, directory = path_to_directory.replace("\", "\\")
ferait penser à Python que le premier argument à remplacer ne se terminait pas avant la citation de départ du deuxième argument puisqu'il avait compris 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 \
Peut-être une erreur de syntaxe dans votre cas, vous pouvez modifier la ligne en:
directory = str(r"C:\Users\Josh\Desktop\20130216").replace('\\','\\\\')
qui vous donnent la bonne sortie suivante:
C:\\Users\\Josh\\Desktop\\20130216