Что не так с этим использованием os.path?

1

Получение неожиданного результата с 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'

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

EDIT: я получаю этот путь из текстового поля в приложении wxPython, поэтому он поставляется в виде строки с невыпадающими обратными косыми чертами, и я не могу заменить их "заменой".

Теги:
path

3 ответа

0
Лучший ответ

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

9

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

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

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

  • 1
    черт, побей меня к этому.
  • 0
    Спасибо, есть ли способ сделать это встроенным, чтобы я мог сделать что-то вроде os.path.isdir (r'a ')?
Показать ещё 5 комментариев
0

Ваша проблема связана с назначением a. Вам нужно избежать обратных косых черт в строке. Попробуйте это вместо:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню