2013-02-21 3 views
1
source = "C:\Program Files (x86)\xxx\yyy\Agent\node.default\blr-w2k8-252\data\somefile.iso" 
print source 

выход:Побег последовательности в пути

"C:\Program Files (x86)\xxx\yyy\Agent 
ode.defaulblr-w2k8-252\data\somefile.iso" 

Обратите внимание, что для \n оде я получил новую линию и deaful t\ BLR ушел

я сделал source=source.replace('\\', '/') но получил тот же результат даже /n также вызывая новую линию.

я source=source.encode('string-escape') теперь выход что-то еще

выход:

"C:\\Program Files (x86)\\xxx\\yyy\\Agent\node.default\x08lr-w2k8-252\\data\\somefile.iso" 

только сырая строка работает т.е.

source=r"C:\Program Files (x86)\xxx\yyy\Agent\node.default\blr-w2k8-252\data\somefile.iso" 

Но в моей программе я только строковый переменный , Как заставить его работать или как сделать переменную строки необработанной?

+0

Что вы подразумеваете под строковой переменной? Как определяется значение этой переменной? – Ric

+0

Здесь я жестко закодирован, но в программе какой-то метод передает путь как строку в переменную. – Reuben

+0

Используйте косые черты даже на окнах. – jdi

ответ

1

Задание «r» перед строковым литералом не изменяет тип данных строки; это просто влияет на интерпретацию строкового литерала. Таким образом, ваша проблема, вероятно, заключается в том, что информация собирается в строку, а не как строка сохраняется после ее сбора. Также обратите внимание, что при печати строки в Python на выходе автоматически включаются escape-символы (например, двойные слэши в примере «output:»). Строка содержит только одну косую черту, хотя оба они показаны.

+0

Но при использовании этого переменного источника я делаю shutil.copy (источник, цель) Я получаю сообщение об ошибке, что: Ошибки при копировании: [Errno 22] недопустимый режим («гь») или имени файла: «C: \\ Program Files (x86) \\ xxx \\ yyy \\ Агент \ node.default \ x08lr-w2k8- 252 \\ data \\ somefile.iso ' – Reuben

+0

\ b изменен на x08 – Reuben

+0

@Reuben - эта ошибка может только если вы указали строку как не сырую - причина в том, что она имеет '\ n', а не' \\ n' в бит 'Agent \ node.default' - это' \ n', как в строке , Ошибка заключается в добавлении экранирования к ошибке, чтобы имитировать стандартную строковую литераловую нотацию (и, следовательно, непечатные символы читаемы). Попробуйте использовать исходные строковые литералы с вашим фактическим кодом (вызов 'shutil.copy') и посмотреть, что произойдет. Я пробовал это без проблем. – Steve314

1

Подробнее о escape sequences. Использование 'r' перед строкой говорит Python игнорировать escape-последовательности и берет строку буквально. Когда вы используете источник жесткого кода для значения, он отличается от значения источника от вызова функции. Если он не работает, проверьте, как создаваемая вами функция создает этот путь.

Смежные вопросы