Как ссылаться на знак "\" в строке python - PullRequest
1 голос
/ 20 августа 2010

У меня проблема со ссылкой на специальный символ в строке:

У меня есть: path='C:\dir\dir1\dir2\filename.doc'

, и я хочу filename.

Когда я пытаюсь: filename=path[path.rfind("\"):-4]

тогда интерпретатор говорит, что это строка ошибки прямо из "\", поскольку рассматривается как комментарий.

Ответы [ 5 ]

12 голосов
/ 20 августа 2010

Вы можете использовать "\\", технически было бы лучше использовать os.path.sep, если вы настаиваете на использовании обратной косой черты. Но еще лучше, используйте / в ваших путях, он отлично работает на Windows

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

>>> import os
>>> path='C:\\dir\\dir1\\dir2\\filename.doc'
>>> os.path.splitext(os.path.basename(path))
('filename', '.doc')

и использование прямых косых черт

>>> path='C:/dir/dir1/dir2/filename.doc'
>>> os.path.splitext(os.path.basename(path))
('filename', '.doc')
2 голосов
/ 20 августа 2010

Либо экранируйте его как "\\", либо используйте необработанные строки, например, так: r "\".

1 голос
/ 20 августа 2010

Escape it:

filename=path[path.rfind("\\"):-4]

или лучше, используйте basename - часть библиотеки Python os.path:

from os.path import basename
basename(path)

Из руководства по basename:

Возвращает базовое имя пути pathname. Это вторая половина пары, возвращенная split(path). Обратите внимание, что результат этой функции отличается от программы с базовым именем Unix; где basename для '/foo/bar/' возвращает 'bar', функция basename() возвращает пустую строку ('').

0 голосов
/ 20 августа 2010

В FAQ есть что-то об этом: Почему необработанные строки (r-строки) не заканчиваются обратной косой чертой?

Если вы пытаетесь собратьИмена путей Windows, обратите внимание, что все системные вызовы Windows также допускают прямую косую черту:

f = open("/mydir/file.txt")  # works fine!

Если вы пытаетесь создать путь для команды DOS, попробуйте, например, один из

dir = r"\this\is\my\dos\dir" "\\"
dir = r"\this\is\my\dos\dir\ "[:-1] 
dir = "\\this\\is\\my\\dos\\dir"
0 голосов
/ 20 августа 2010

Вы можете ввести double: "\".

Однако, чтобы отделить имя файла от имени файла Windows, используйте раздел, так как os.path.split работает только с /:

>>> path=r'C:\dir\dir1\dir2\filename.doc'
>>> print path.rpartition('\\')[-1]
filename.doc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...