Получение неожиданного результата с 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, поэтому он поставляется в виде строки с невыпадающими обратными косыми чертами, и я не могу заменить их "заменой".
Использование a.encode('string-escape')
представляется предпочтительным для других решений, потому что i) оно может быть сделано inline и ii) оно не добавляет лишних одиночных/двойных кавычек.
Вы не избегаете своих обратных косых черт. Либо используйте \\
вместо \
, либо используйте необработанные строки, например:
a = r"D:\temp\temp.txt"
В ваших неизменяемых строках символ \t
интерпретируется как символ табуляции.
Ваша проблема связана с назначением a. Вам нужно избежать обратных косых черт в строке. Попробуйте это вместо:
a = "D:\\temp\\temp.txt"