2013-05-13 12 views
0

Windows에서 Python 2.6 사용 arg로 경로 이름을 받아 들여야하는 함수가 있습니다. 특정 경로가 전달되면 문제가 발생합니다.사용자 입력 경로 이름 살생

C:\users\bob\something.png #this is handled no prob. 
C:\users\bob\nothing.png  #this generates a WindowsError 
C:\users\bob\test.png   #this also generates a WindowsError 

는 내가 수집하고있어은 "아무것도"경로의 \n 새로운 라인으로 해석되고 있으며, "테스트"경로의 \t이 탭으로 해석되고 있다는 점이다.

경로 이름을 인쇄하면 문제가 발생합니다. 대신 새로운 라인의 탭을 제외하고 '테스트'경로에 대한 동일

print os.path.abspath("C:\users\bob\nothing.png") 
C:\users\bob 
othing.png 

.

내가 지금까지 생각해 낸 유일한 점은 \n 또는 \t이 경로 이름에 있는지 확인한 다음 적절하게 처리하는 것이지만 더 나은 방법이어야합니다.

if '\n' in path_name: 
    #escape slash, move on 

더 좋은 방법이 있을까요?

+0

이것은 경로와는 아무런 관련이 없습니다. 그것은 파이썬 소스 파일에서 문자열 인용에 관한 것으로 보인다. –

답변

4
print os.path.abspath(r"C:\users\bob\nothing.png") 

당신은 당신이 예에서 볼 수 있듯이

>>> a = raw_input("Enter Path:") 
Enter Path:C:\www\a\nothing.jpg 
>>> a 
'C:\\www\\a\\nothing.jpg' 

사용자 입력이 참으로 ...

사용자 입력이 자동으로 슬래시를 탈출해야하지만 ... 찾고있는 무엇을 할 수 탈출

+0

어떤 이유로 슬래시가 't'또는 'n'앞에 오면 자동으로 슬래시가 이스케이프되지 않습니다. 다른 경우가 발생할 수 있습니다. Windows 문제인지 아니면 Python 문제인지 확실하지 않지만 원시 문자열을 강요하면 트릭을 수행하여 9 분이 더 걸립니다 .... – Andenthal

+1

@endenthal 모든 백 슬래시는 이스케이프해야합니다. "특수 문자"를 구성하는 것뿐만 아니라 – cmd

+0

나는 그들이 있어야한다는 것을 알고 있지만 그렇지 않다 :'print os.path.getsize ("C : \ users \ bob \ test.png")'는 다음을 반환한다. : \\ users \\ bob \ test.png "파일 이름, 디렉토리 이름 또는 볼륨 레이블 구문이 올바르지 않습니다"왜 처음 두 개가 이스케이프 처리됩니까? – Andenthal