나는 사용자가 Sox를 사용하여 함께 선택한 오디오 파일을 추가하는 프로그램을 만들고 있습니다.Windows 디렉터리 추가 Python
저는 원래 리눅스 용 프로그램을 만들었지 만 Windows와 호환되도록 만들고 있습니다. Windows에서 파일 목록을 Sox에 전달하면 프로그램에서 '파일 이름, 디렉토리 이름 또는 볼륨 레이블 구문이 잘못되었습니다.'라는 메시지가 나타납니다.
파일 목록을 인쇄 할 때 C:\\\MyProgram\\\
등등입니다. 경로의 '\\'
을 '\'
으로 만드는 방법은 무엇입니까?
저는 Windows 8.1에서 문제가 될 수 있습니다.
나는 시도했다 :
str(nameoffile)
os.path.abspath(nameoffile)
os.path.normpath(nameoffile)
파일 및 디렉토리의 거대한 목록이있다, 그래서 각각의 절대 파일을 설정하는 것입니다하지 옵션, 나는 할 수 있도록) (os.path.join 사용하고 사용자가 폴더를 탐색 할 수 있습니다.
그러나 파일을 목록에 전달한 다음 subprocess.list2cmdline(mylist)
을 사용하여 목록을 호출하면 단순히 위의 오류가 발생합니다.
예 : os.path.join
이 파일을 추가 할 때
mydirectory = os.getcwd()
appendlist = list()
appendlist.append("sox")
for x, i in enumerate(self.fileselected): # A List Of Files The User Selected
directory = chosendirectory
nextfile = os.path.join(chosendirectory, i)
appendlist.append(nextfile)
subprocess.call([subprocess.list2cmdline(appendlist)], shell=True)
.... 그것은 "C:\\\Program\\\file
"를 생성 한 후이 str()
로 변환됩니다. str()은 "C:\\\Program\\\file
"이고 이스케이프 문자는 문자열에 등록되지 않습니다. 이스케이프 문자를 제거하여 유효한 Windows 디렉토리로 목록에 전달하려면 어떻게합니까?
[this] (http : //www.diveintopython.net/file_handling/os_module.html) 자습서가 도움이 될 것입니다. ''\''는 시간의 역사상 거의 모든 언어의 문자열에 대한 이스케이프 문자이기 때문에 Windows에서의 경로 작업은 PITA입니다. TL, DR, 문자열 리터럴에서 경로 구분 기호는 항상 문자열에서 정규''r '\' "'을 얻는 방법이기 때문에 항상''\\ '''이 될 것입니다. – aruisdante
그것은 도움이되었지만 어떤 이유에서든 서브 프로세스는 '\\'을 좋아하지 않는다. 반복 할 때조차도 여전히 오류를 발생시킨다. 문자열이나리스트에서 '\'을 '\'으로 만들려면 os 모듈이나 다른 곳에 메소드가 내장되어 있습니까? – caleb
[this] (http://pythonconquerstheuniverse.wordpress.com/2008/06/04/gotcha-%E2%80%94-backslashes-in-windows-filenames/)를 확인하십시오. 내 생각에''os.path.normpath (os.path.abspath (nameoffile))''를 실행하면 작업이 완료됩니다. – aruisdante