How should I write a Windows path in a Python string literal?
Как я должен написать путь Windows в строковом литерале Python?
Предположим, мне нужно сослаться на путь C:\meshes\as. Если я попытаюсь написать это напрямую, например, "C:\meshes\as", я столкнусь с проблемами - либо какое-то исключение, либо путь просто не работает. Это потому, что \ действует как escape-символ? Как я должен написать пути?
Переведено автоматически
Ответ 1
Вы всегда можете использовать:
'C:/mydir'
Это работает как в Linux, так и в Windows.
Другая возможность заключается в:
'C:\\mydir'
Если у вас возникли проблемы с некоторыми именами, вы также можете попробовать необработанные строковые литералы:
r'C:\mydir'
Однако лучше всего использовать os.path функции модуля, которые всегда объединяются с правильным разделителем путей (os.path.sep) для вашей операционной системы:
os.path.join(mydir, myfile)
Из python 3.4 вы также можете использовать pathlib модуль. Это эквивалентно приведенному выше:
pathlib.Path(mydir, myfile)
или:
pathlib.Path(mydir) / myfile
Ответ 2
Используйте os.path модуль.
os.path.join( "C:", "meshes", "as" )
Или использовать необработанные строки
r"C:\meshes\as"
Я бы также рекомендовал не использовать пробелы в пути или именах файлов. И вы могли бы использовать двойные обратные косые черты в своих строках.
"C:\\meshes\\as.jpg"
Ответ 3
Да, \ в строковых литералах Python обозначается начало escape-последовательности. В вашем path у вас есть допустимая двухсимвольная управляющая последовательность \a, которая сворачивается в один символ, который является ASCII Bell:
Как вы можете видеть, во всех этих примерах обратная косая черта и следующий символ в литерале были сгруппированы вместе, чтобы сформировать один символ в конечной строке. Полный список escape-последовательностей Python находится здесь.
Path принимает строку, подобную пути, и настраивает все для текущей ОС, будь то Windows или Linux. Например, в Linux это преобразует все обратные косые черты в прямые, а в Windows - наоборот.
Я потратил 6 месяцев на использование os.path.join(...), затем переключился на normpath(...) затем, наконец, переключился на Path(...). После использования всех трех, Path - лучший из всех миров.