Что не так с этим использованием os.path? - PullRequest
1 голос
/ 31 марта 2011

Получение неожиданного результата с помощью os.path в Windows XP, Python 2.6.6:

a = "D:\temp\temp.txt"
os.path.dirname(a)
>>> 'D:' # Would expect 'D:\temp'
os.path.normpath(a)
>>> 'D:\temp\test.txt'
os.path.basename(a)
>>> '\temp\test.txt' #Would expect 'test.txt'
a.replace("\\", "/")
>>>'D:\temp\test.txt' # Would expect 'D:/temp/test.txt'

Может кто-нибудь объяснить, что происходит?Как я могу получить правильное / ожидаемое поведение?Почему я не могу заменить обратные косые черты на передние косые черты?

РЕДАКТИРОВАТЬ: я получаю этот путь из текстового поля в приложении wxPython, поэтому он представляет собой строку с обратными косыми чертами без экранирования, и я не могу показатьсязаменить их на «заменить».

Ответы [ 3 ]

9 голосов
/ 31 марта 2011

Вы не избежите обратной косой черты.Либо используйте \\ вместо \, либо используйте необработанные строки, например:

a = r"D:\temp\temp.txt"

В ваших неэкранированных строках \t интерпретируется как символ табуляции.

0 голосов
/ 31 марта 2011

Использование a.encode('string-escape') представляется предпочтительным по сравнению с другими решениями, потому что i) это может быть сделано встроенным и ii) оно не добавляет дополнительных одинарных / двойных кавычек.

0 голосов
/ 31 марта 2011

Ваша проблема с назначением. Вы должны избежать обратной косой черты в строке

a = "D:\\temp\\temp.txt"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...