Работа с символом BACKSLASH в нестроковых литералах в Python - PullRequest
0 голосов
/ 25 февраля 2010

У меня есть следующая строка, прочитанная из элемента XML, и она назначена переменной с именем filename. Я не знаю, как сделать это более понятным, чем сказать имя файла = следующую строку, не заставляя кого-то думать, что у меня есть строковый литерал тогда. \\server\data\uploads\0224.1307.Varallo.mov когда я пытаюсь передать это

os.path.basename(filename)

Я получаю следующее

\\server\\data\\uploads\x124.1307.Varallo.mov

Я пробовал filename.replace ('\\', '\\\\'), но это тоже не работает. Затем os.path.basename (filename) возвращает следующее.

\\\\server\\data\\uploads\\0224.1307.Varallo.mov

Обратите внимание, что \ 0 теперь не преобразуется в \ x, но теперь не обрабатывает строку вообще.

что я могу сделать с моей переменной имени файла, чтобы получить эту строку в правильном состоянии, чтобы os.path.basename () фактически вернул мне базовое имя. Я на OSX, поэтому uncpath материал недоступен.

Все попытки заменить \ на \\ вручную проваливаются из-за того, что \ 0 преобразуется в \ x в начале базового имени.

ПРИМЕЧАНИЕ: это НЕ строковый литерал, поэтому r '' не работает.

Ответы [ 2 ]

2 голосов
/ 25 февраля 2010

Нам нужна дополнительная информация. Что именно в переменной имени файла? Чтобы ответить, используйте print repr(filename) и добавьте результаты к вашему вопросу выше.


Дикая догадка

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Это предположение - попробуйте:

import ntpath
print ntpath.basename(filename)
1 голос
/ 25 февраля 2010

Все понижения в мире не изменят того факта, что вы делаете неправильно . os.path для нативных путей. \\foo\bar\baz - это не путь OS X, это Windows UNC. posixpath не оборудован для обработки UNC; ntpath есть.

...