python заменяет одну обратную косую черту двойной обратной косой чертой

в python я пытаюсь заменить одну обратную косую черту ( " ") двойной обратной косой чертой (""). У меня есть следующий код:

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

однако это дает сообщение об ошибке, говорящее, что ему не нравится двойная обратная косая черта. Кто-нибудь может помочь?

9 ответов


нет необходимости использовать str.replace или string.replace здесь, просто преобразуйте эту строку в необработанную строку:

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

ниже repr версия вышеуказанной строки, Вот почему вы видите \ здесь. Но на самом деле фактическая строка содержит только '\' не \.

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

но, когда вы собираетесь печатать эту строку вы не получите '\' на выходе.

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

если вы хотите, чтобы строка показывала '\' во время print затем использовать str.replace:

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

repr версия теперь будет отображаться \\:

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

позвольте мне сделать это просто и понятно. Позволяет использовать модуль в Python, чтобы избежать специальных символов.

Python скрипт :

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

выход :

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

пояснение :

теперь обратите внимание, что re.побег функция по экранированию специальных символов в данной строке мы можем добавить другую обратную косую черту перед каждой обратной косой чертой, и, наконец, выходные результаты в двойном обратная косая черта, желаемый выход.

надеюсь, это поможет вам.


используйте escape-символы:"full\path\here", "\" и "\\"


в python \ (обратная косая черта) используется в качестве escape-символа. Что это означает, что в местах, где вы хотите вставить специальный символ (например, newline), вы будете использовать обратную косую черту и другой символ (\n для перехода на новую строку)

С вашим примером sting вы заметили бы, что когда вы ставите "C:\Users\Josh\Desktop130216" в repl вы получите "C:\Users\Josh\Desktop\x8130216". Это потому что имеет особое значение в жало питона. Если вы хотите указать \ тогда вам нужно поставить два \ in ваша строка.

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

другой вариант-уведомить python, что все ваше жало не должно использовать \ как escape-символ, предварительно ожидая sting с r

r"C:\Users\Josh\Desktop130216"

это" сырая " строка и очень полезна в ситуациях, когда вам нужно использовать много обратных косых черт, таких как с регулярными выражениями.

в случае, если вы хотите заменить один \ с \ затем вы будете использовать:

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

обратите внимание что я не использую r' в последних двух укусах выше. Это потому, что, когда вы используете r' форма укусов вы не можете закончить эту строку одним \

почему необработанные строковые литералы Python не заканчиваются одним слеш?

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


может быть синтаксическая ошибка в вашем случае, вы можете изменить строку на:

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

, которые дают вам право следующий вывод:

C:\Users\Josh\Desktop\20130216

учитывая исходную строку, манипуляция с os.путь может иметь больше смысла, но вот строковое решение;

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

отметим, что split относится к \ в исходной строке в виде пустой строки с разделителями. Используя filter избавляется от этих пустых строки так join не удвоит уже удвоенные обратные косые черты. К сожалению, если у вас есть 3 или более, они сводятся к удвоенным обратным косым чертам, но я не думаю, что это повредит вам в пути windows выражение.


обратная косая черта указывает на специальный escape-символ. Следовательно,directory = path_to_directory.replace("\", "\") заставит Python думать, что первый аргумент для замены не заканчивался до начальной цитаты второго аргумента, поскольку он понимал конечную цитату как escape-символ.

directory=path_to_directory.replace("\","\\")

можно использовать

os.path.abspath(path_with_backlash)

он возвращает путь с \


использование:

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

побег \ символ.