web-dev-qa-db-fra.com

python remplace la simple barre oblique inverse par une double barre oblique inverse

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?

31
Josh Wood

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'
42
Ashwini Chaudhary

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.

9
Rewanth Cool

Utilisez des caractères d'échappement: "full\\path\\here", "\\" et "\\\\"

8
alexpinho98

É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.

0
CAB

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("\\","\\\\")
0
abacles

Vous pourriez utiliser 

os.path.abspath(path_with_backlash)

il retourne le chemin avec \

0
AHRG

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
0
A STEFANI