Ввод каталогов в виде строк в Python - PullRequest
5 голосов
/ 13 января 2012

У меня есть список каталогов, которые жестко запрограммированы в моей программе, например:

import os
my_dirs = ["C:\a\foo"
          ,"C:\b\foo"
          ,"C:\c\foo"
          ,"C:\t\foo"
          ]

Позже я хочу выполнить какую-то операцию, например os.path.isfile(my_dirs[3]).Но строка my_dirs [3] становится испорченной, потому что "\t" - это сокращение от tab или что-то в этом роде.

Я знаю, что решением этой проблемы будет использование этого:

my_dirs = ["C:\\a\\foo"
          ,"C:\\b\\foo"
          ,"C:\\c\\foo"
          ,"C:\\t\\foo"
          ]

И еще одно решение - использовать прямые косые черты.

Но мне нравится возможность копировать каталоги прямо из проводника в мой код Python.Можно ли как-то сказать Python, чтобы он не превращал "\t" во вкладку или каким-либо другим решением моей проблемы?

Ответы [ 2 ]

8 голосов
/ 13 января 2012

Я бы посоветовал использовать косые черты или двойные косые черты . Исходная строка, предложенная ThiefMaster, может быть сложной; он может, например, не заканчиваться обратной косой чертой; так что r'c: \ foo \ 'это , а не допустимая необработанная строка. См. документы python :

r "\" не является допустимым строковым литералом (даже необработанная строка не может заканчиваться на нечетное количество обратных слешей). В частности, необработанная строка не может заканчиваться одиночная обратная косая черта (поскольку обратная косая черта будет выходить из следующей цитаты символы)

8 голосов
/ 13 января 2012

Используйте прямые косые черты или необработанные строки: r'C:\a\foo' или 'C:/a/foo'

На самом деле, использование прямых косых черт является лучшим решением, поскольку, как упомянул @Wesley, у вас не может быть необработанной строки, заканчивающейся одной обратной косой чертой.Хотя функции из os.path будут использовать обратную косую черту в окнах, их смешивание не вызывает никаких проблем - поэтому я бы предложил использовать прямые косые черты в жестко закодированных путях и не заботиться о обратной косой черте, введенной функциями из os.path.

Не забывайте, что жестко закодированные пути сами по себе плохи.Особенно если вы используете системные папки (включая «Мои документы» и «AppData»), вы должны использовать функции WinAPI для их извлечения независимо от того, где они на самом деле находятся.

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