Путь Windows в Python - PullRequest
       24

Путь Windows в Python

94 голосов
/ 02 июня 2010

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

Ответы [ 3 ]

154 голосов
/ 02 июня 2010

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

'C:/mydir'

это работает как в Linux, так и в Windows. Другие возможности

'C:\\mydir'

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

r'C:\mydir'

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

os.path.join(mydir, myfile)

В python 3.4 вы также можете использовать модуль pathlib . Это эквивалентно вышесказанному:

pathlib.Path(mydir, myfile)

или

pathlib.Path(mydir) / myfile
13 голосов
/ 02 июня 2010

Используйте модуль os.path.

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

Или используйте необработанные строки

r"C:\meshes\as"
10 голосов
/ 31 марта 2018

Да, \ в строковых литералах 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: здесь .

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

  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')
    
...