Форматирование путей к файлам - PullRequest
6 голосов
/ 11 июля 2011

Я новичок в Python, так что могу ошибаться, но у меня проблемы с получением и переходом в каталог файла. Мой скрипт принимает несколько имен файлов, которые могут находиться в любом каталоге. В моем скрипте мне нужно Python, чтобы перейти в каталог файла, а затем выполнить некоторые действия. Однако у меня возникают проблемы при смене каталогов.

Вот что я пробовал до сих пор:

path=os.path.split(<file path>)
os.chdir(path[0])
<Do things to file specified by path[1]>

Я получил путь к файлу путем перетаскивания из проводника в командную строку. Это вводит имя пути как что-то вроде "C:\foo\bar\file_name.txt". Когда я запускаю первую строку в интерпретаторе, я выхожу ('C:\\foo\bar','file_name.txt'). Проблема в том, что по какой-то причине последний обратный слеш не экранируется автоматически, поэтому при запуске строки os.chdir(path[0]) я получаю ошибки.

Мой вопрос: почему последний обратный слэш не экранируется автоматически, как другие? Как я могу вручную избежать последней обратной косой черты? Есть ли лучший способ получить каталог файла и перейти на него?

Ответы [ 2 ]

6 голосов
/ 11 июля 2011

Последняя обратная косая черта не экранируется автоматически, поскольку Python экранирует обратную косую черту только в обычных строках, когда следующий символ не образует escape-последовательность с обратной косой чертой.Фактически, в вашем примере вы НЕ получили бы 'C:\\foo\bar' от 'C:\foo\bar', вы бы получили 'C:\x0coo\x08ar'.

Что вы хотите сделать, это либо заменить обратную косую черту на прямую, либо сделатьпроще для операций перетаскивания, просто добавьте путь к r, чтобы он был необработанной строкой и не распознавал escape-последовательности.

>>> os.path.split(r"C:\foo\bar\file_name.txt")
('C:\\foo\\bar','file_name.txt')
3 голосов
/ 11 июля 2011

Вы используете правильные модули и методы. Когда вы помещаете туда путь Windows, сделайте строку необработанной, чтобы ваша команда выглядела следующим образом:

path=os.path.split(r'C:\foo\bar\file_name.txt')

Обратите внимание на r перед первой кавычкой, которая заставляет Python не рассматривать обратные слеши в строке как escape-последовательности.

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