2011-03-31 4 views
1

윈도우 XP, 파이썬 2.6.6에을 os.path와 예상치 못한 결과를 가져 오기 :이 os.path 사용법에있어 문제점이 있습니까?

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 응용 프로그램의 텍스트 필드에서이 경로를 얻으므로 이스케이프 처리되지 않은 백 슬래시가 포함 된 문자열로 표시되므로 "바꾸기"로 바꿀 수 없습니다.

답변

0

a.encode('string-escape')를 사용하여이 인라인 할 수 있습니다) 내가 있기 때문에 다른 솔루션에 바람직 보이고 II)가 추가로 싱글/더블 - 따옴표를 추가하지 않습니다 : 대신이 시도 문자열에서 백 슬래시를 이스케이프해야합니다.

9

백 슬래시를 이스케이프 처리하지 않습니다. 어느 예컨대, \\ 대신 \을 사용 또는 원시 문자열을 사용하여 이스케이프 문자열에

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

을의 \t는 탭 문자로 해석됩니다.

+1

짜증나게 해주세요. – chucksmash

+0

감사합니다. os.path.isdir (r'a ') 같은 것을 할 수 있도록이 방법을 인라인으로 수행 할 수 있습니까? – Benjamin

+0

문자열 대신 os.path.dirname을 File 객체로 전달하면 이스케이프에 대해 걱정할 필요가 없습니다. 문자열을 전달하기 때문에 백 슬래시를 이스케이프 처리하거나 원시 입력을 사용하면됩니다. 문자열을 전달할 수있는 방법이 있습니까? – chucksmash

0

문제는 a의 할당과 관련이 있습니다.

a = "D:\\temp\\temp.txt" 
관련 문제