Путь Windows в Python



каков наилучший способ представления каталога Windows, например "C:meshesas"? Я пытался изменить скрипт, но он никогда не работает, потому что я не могу получить правильный каталог, я предполагаю, что из-за '' действуя как escape-символ?

640   3  

3 ответов:

вы можете всегда использовать:

'C:/mydir'

это работает как в linux, так и в windows. Другая возможность-это

'C:\mydir'

если у вас есть проблемы с некоторыми именами вы также можете попробовать сырые строковые литералы:

r'C:\mydir'

однако лучше всего использовать os.path функции модуля, которые всегда выбирают правильную конфигурацию для вашей ОС:

os.path.join(mydir, myfile)

использовать os.path модуль.

os.path.join( "C:", "meshes", "as" )

или использовать сырые строки

r"C:\meshes\as"

да \ в Python строковые литералы обозначает начало 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']

Как видите, во всех этих примерах обратная косая черта и следующий символ в дословный были сгруппированы вместе, чтобы сформировать один символ в последней строке. Полный список escape-последовательностей Python-это здесь.

есть множество способов справиться с этим:

  1. Python не будет обрабатывать escape-последовательности в строковых литералах с префиксом r или R:

    >>> r'C:\meshes\as'
    'C:\meshes\as'
    >>> print(r'C:\meshes\as')
    C:\meshes\as
    
  2. Python в Windows должен обрабатывать прямые косые черты, тоже.

  3. вы могли бы использовать os.path.join ...

    >>> import os
    >>> os.path.join('C:', os.sep, 'meshes', 'as')
    'C:\meshes\as'
    
  4. ... или новее pathlib модуль

    >>> from pathlib import Path
    >>> Path('C:', '/', 'meshes', 'as')
    WindowsPath('C:/meshes/as')
    

Comments

    Ничего не найдено.