Как добавить «\\?\» к началу пути к файлу в Python

Я пытаюсь работать с некоторыми длинными путями к файлам (Windows) в Python и столкнулся с некоторыми проблемами. Прочитав вопрос здесь, похоже, мне нужно добавить '\\?\' перед моими длинными путями к файлам, чтобы использовать их с os.stat(filepath). У меня проблема в том, что я не могу создать строку в Python, которая заканчивается обратной косой чертой. Вопрос здесь указывает, что вы даже не можете заканчивать строки в Python одним символом '\'.

Есть ли что-нибудь в любой из стандартных библиотек Python или где-либо еще, что позволяет вам просто добавить '\\?\' в начало пути к файлу, который у вас уже есть? Или есть ли другой способ работы с длинными путями к файлам в Windows с помощью Python? Кажется, что это так просто сделать, но я не могу понять это на всю жизнь.


person Bryce Thomas    schedule 26.12.2009    source источник
comment
добавить к началу - сбивающая с толку фраза. Возможно, вы имели в виду предварять.   -  person S.Lott    schedule 26.12.2009


Ответы (2)


"\\\\?\\" должен дать вам именно ту строку, которую вы хотите.

Более длинный ответ: конечно, вы можете закончить строку в Python обратной косой чертой. Вы просто не можете сделать это, когда это «сырая» строка (с префиксом «r»). Который вы обычно используете для строк, содержащих (много) обратных косых черт (чтобы избежать печально известного синдрома «наклоняющейся зубочистки» ;-))

person Jürgen A. Erhard    schedule 26.12.2009
comment
Необработанные строковые литералы предназначены для экранирования escape-последовательностей (\", \n, \(, \s и т. д.), поэтому вы не можете заканчивать одну из них обратной косой чертой. - person ; 26.12.2009
comment
Да, это работает. Я пробовал это раньше и получил ошибку, хотя это оказалось из-за того, что я делал это с путем к файлу, например, \\?\D:somefile вместо \\?\D:\somefile. - person Bryce Thomas; 26.12.2009

Даже с необработанной строкой вы можете закончить с обратной косой чертой:

>>> print r'\\?\D:\Blah' + '\\'
\\?\D:\Blah\

или даже:

>>> print r'\\?\D:\Blah' '\\'
\\?\D:\Blah\

поскольку Python объединяет буквальные строки в одну.

person Mark Tolonen    schedule 26.12.2009