Преобразование обратной косой черты в прямую косую черту в python - PullRequest
7 голосов
/ 28 ноября 2010

Привет Я читал статьи, связанные с преобразованием обратной косой черты. Но соль должна была использовать необработанную строку.

Но проблема в моем случае:

Я получу путь к файлу динамически к переменной Var = 'C: \ dummy_folder \ a.txt' В этом случае мне нужно преобразовать его в прямую косую черту. Но из-за '\ a' я не могу преобразовать в косую черту

Как мне конвертировать? ИЛИ Как мне изменить эту строку на необработанную строку, чтобы я мог изменить ее на прямую косую черту

Ответы [ 5 ]

12 голосов
/ 28 ноября 2010

Не делай этого. Просто используйте os.path и позвольте ему обрабатывать все. Вы не должны явно устанавливать прямую или обратную косую черту.

>>> var=r'C:\dummy_folder\a.txt'
>>> var.replace('\\', '/')
'C:/dummy_folder/a.txt'

Но опять же, не надо. Просто используйте os.path и будьте счастливы!

11 голосов
/ 25 января 2011

Существует также os.path.normpath (), который преобразует обратные и косые черты в зависимости от локальной ОС.Пожалуйста, смотрите здесь для получения подробной информации об использовании.Вы бы использовали это так:

>>> string = r'C:/dummy_folder/a.txt'
>>> os.path.normpath(string)
'C:\dummy_folder\a.txt'
2 голосов
/ 28 ноября 2010

Обработка путей как простой строки может привести к неприятностям .;даже больше, если путь, который вы обрабатываете, является пользовательским вводом или может изменяться непредсказуемым образом.

Различные ОС имеют разные способы выражения пути к данному файлу, и у каждого современного языка программирования есть свои методы для обработки путейи ссылки на файловую систему.Конечно, у Python и Ruby есть:

Если вам действительно нужно обрабатывать строки:

  • Python: string.replace
  • Ruby: string.gsub
1 голос
/ 28 ноября 2010

Необработанные строки предназначены для строковых литералов (записанных непосредственно в исходном файле), чего здесь, похоже, нет.В любом случае, прямые косые черты не являются специальными символами - их можно без проблем встроить в обычную строку.Это обратные косые черты, которые обычно имеют другое значение в строке, и их необходимо "экранировать", чтобы они интерпретировались как буквальные обратные косые черты.

Чтобы заменить обратные косые черты на прямые косые черты:

# Python:
string = r'C:\dummy_folder\a.txt'
string = string.replace('\\', '/')

# Ruby:
string = 'C:\\dummy_folder\\a.txt'
string = string.gsub('\\', '/')
0 голосов
/ 28 ноября 2010
>>> 'C:\\dummy_folder\\a.txt'.replace('\\', '/')
'C:/dummy_folder/a.txt'

В строковом литерале необходимо экранировать символ \.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...