Да, \
в строковых литералах 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
(табуляция), \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']
Как вы можете видеть, во всех этих примерах обратный слеш и следующий символ в литерале были сгруппированы вместе, чтобы сформировать один символ в конечной строке. Полный список escape-последовательностей 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')