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.побег функция по экранированию специальных символов в данной строке мы можем добавить другую обратную косую черту перед каждой обратной косой чертой, и, наконец, выходные результаты в двойном обратная косая черта, желаемый выход.
надеюсь, это поможет вам.
в 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 не заканчиваются одним слеш?
может быть синтаксическая ошибка в вашем случае, вы можете изменить строку на:
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("\","\\")