Каков наилучший способ представления каталога Windows, например "C:\meshes\as"
? Я пытаюсь изменить скрипт, но он никогда не работает, потому что я не могу получить правильный каталог, я полагаю, из-за того, что '\'
действует как escape-символ?
Путь к Windows в Python
Ответ 1
вы можете использовать всегда:
'C:/mydir'
это работает как в Linux, так и в окнах. Другая возможность
'C:\\mydir'
если у вас есть проблемы с некоторыми именами, вы также можете попробовать сырые строковые литералы:
r'C:\mydir'
однако наилучшей практикой является использование os.path
модуля os.path
которые всегда выбирают правильную конфигурацию для вашей ОС:
os.path.join(mydir, myfile)
Ответ 2
Используйте модуль os.path
.
os.path.join( "C:", "meshes", "as" )
Или использовать необработанные строки
r"C:\meshes\as"
Ответ 3
Да, \
in Python строковые литералы означают начало escape-последовательности. На вашем пути у вас есть действительная двухсимвольная escape-последовательность \a
, которая сворачивается в один символ, который является ASCII Bell:
>>> '\a'
'\x07'
>>> len('\a')
1
>>> 'C:\meshes\as'
'C:\\meshes\x07s'
>>> print('C:\meshes\as')
C:\meshess
Другие общие escape-последовательности включают \t
(tab), \n
(строка), \r
(возврат каретки):
>>> list('C:\test')
['C', ':', '\t', 'e', 's', 't']
>>> list('C:\nest')
['C', ':', '\n', 'e', 's', 't']
>>> list('C:\rest')
['C', ':', '\r', 'e', 's', 't']
Как вы можете видеть, во всех этих примерах обратная косая черта и следующий символ в литерале были сгруппированы вместе, чтобы сформировать единственный символ в последней строке. Полный список управляющих последовательностей, Python является здесь.
Существует множество способов борьбы с этим:
-
Python не будет обрабатывать escape-последовательности в строковых литералах с префиксом
r
илиR
:>>> r'C:\meshes\as' 'C:\\meshes\\as' >>> print(r'C:\meshes\as') C:\meshes\as
-
Python на Windows также должен обрабатывать косые черты.
-
Вы можете использовать
os.path.join
...>>> import os >>> os.path.join('C:', os.sep, 'meshes', 'as') 'C:\\meshes\\as'
-
... или новый модуль
pathlib
>>> from pathlib import Path >>> Path('C:', '/', 'meshes', 'as') WindowsPath('C:/meshes/as')