Странные разделители пути в Windows - PullRequest
5 голосов
/ 03 августа 2011

Я использую этот код:

#!/usr/bin/python      coding=utf8
#  test.py = to demo fault
def loadFile(path):
    f = open(path,'r')
    text = f.read()
    return text
if __name__ == '__main__':
    path = 'D:\work\Kindle\srcs\test1.html'
    document = loadFile(path)
    print len(document)

Это дает мне обратную ссылку

D:\work\Kindle\Tests>python.exe test.py
Traceback (most recent call last):
  File "test.py", line 11, in <module>
    document = loadFile(path)
  File "test.py", line 5, in loadFile
    f = open(path,'r')
IOError: [Errno 22] invalid mode ('r') or filename: 'D:\\work\\Kindle\\srcs\test1.html'

D:\work\Kindle\Tests>

Если я изменю линию пути на

path = 'D:\work\Kindle\srcs\\test1.html'

(обратите внимание на двойную \\) все отлично работает.

Почему? Или это разделитель '\', или это не смешивание?

System. Windows 7, 64 бит, Python 2.7 (версия 27: 82525, 4 июля 2010, 09:01:59) [MSC v.1500 32 бит (Intel)] на win32

Проверено - и все обратные слеши отображаются правильно.

Ответы [ 6 ]

6 голосов
/ 03 августа 2011

Обратная косая черта является escape-символом, когда следующая комбинация символов приведет к особому значению.Возьмите следующие примеры:

>>> '\r'
'\r'
>>> '\n'
'\n'
>>> '\b'
'\x08'
>>> '\c'
'\\c'
>>>

r, n и b имеют специальные значения, когда им предшествует обратная косая черта.То же самое верно для т, который будет производить вкладку.Вам нужно либо A. Удвоить все обратные косые черты для согласованности, потому что '\\' создаст обратную косую черту, либо, B, использовать необработанные строки: r'c:\path\to\my\file.txt'.Предыдущий r будет подсказывать интерпретатору не оценивать обратную косую черту как escape-последовательности, не позволяя \t отображаться как табуляция.

6 голосов
/ 03 августа 2011

Использовать необработанные строки для путей Windows:

path = r'D:\work\Kindle\srcs\test1.html'

В противном случае \t фрагмент вашей строки будет интерпретироваться как символ табуляции.

6 голосов
/ 03 августа 2011

Вам нужно избегать обратной косой черты в путях с дополнительной обратной косой чертой ... как вы сделали для '\\test1.html'.

'\t' - escape-последовательность для символа табуляции.

'D:\work\Kindle\srcs\test1.html по существу 'D:\work\Kindle\srcs est1.html'.

Вы также можете использовать необработанные литералы, r'\test1.html' расширяется до:

'\\test1.html'
1 голос
/ 03 августа 2011

Помимо использования необработанной строки (префиксная строка с символом r), ​​модуль os.path может быть полезен для автоматического предоставления корректных для ОС слешей при построении имени пути.

1 голос
/ 03 августа 2011

Обратная косая черта \ - это escape-символ в Python. Таким образом, ваш фактический путь к файлу будет D:\work\Kindle\srcs<tab>est1.html. Используйте os.sep, экранируйте обратную косую черту с помощью \\ или используйте необработанную строку, указав r'some text'.

0 голосов
/ 12 февраля 2012
...