2010-04-18 3 views
9

나는 디렉토리 이름을 입력으로 받아들이는 여러 스크립트를 가지고 있으며, 내 프로그램은 그 디렉토리에 파일을 생성한다. 때로는 프로그램에 주어진 디렉토리의 기본 이름을 가져 와서 디렉토리에서 다양한 파일을 만들기 위해 사용하려고합니다. 예를 들어,Python에서 디렉토리의 기본 이름을 사용하는 우아한 방법은 무엇입니까?

# directory name given by user via command-line 
output_dir = "..." # obtained by OptParser, for example 
my_filename = output_dir + '/' + os.path.basename(output_dir) + '.my_program_output' 
# write stuff to my_filename 

문제는 사용자가 후행 슬래시 디렉토리 이름을 제공하는 경우, 다음 os.path.basename 내가 원하지 무엇 인 빈 문자열을 반환 할 것입니다. 파이썬에서 이러한 슬래시/후행 슬래시 문제를 처리하는 가장 우아한 방법은 무엇입니까? output_dir의 끝에 슬래시를 수동으로 검사하여 제거 할 수 있다는 것을 알고 있지만 더 나은 방법이 있어야합니다. 거기 있니?

또한 '/'문자를 수동으로 추가해도 괜찮습니까? 예 : output_dir + '/'os.path.basename() 또는 경로를 구축하는 더 일반적인 방법이 있습니까?

감사합니다.

답변

15

"후행 슬래시"문제 (및 기타 문제!)를 처리하려면 사용자 입력을 os.path.normpath()으로 삭제하십시오.

하는 것은, 경로를 구축 사용 os.path.join()

1

수동으로 경로를 작성하는 것은 이식성에 나쁜 아이디어입니다. Windows에서 중단됩니다. os.path.sep를 사용해야합니다.

첫 번째 질문은 os.path.join을 사용하는 것이 올바른 생각입니다.

+1

"" "" "그것은 Windows에서 휴식 것"포함 슬래시는 예를 들어,에 명령의 일부로 공급하는 경우에만 중단됩니다 'os.system()'; DOS 명령 구문 분석기는 역 슬래시 만 인식합니다. 예를 들어 open()은 꽤 괜찮습니다. 그러나 구성된 경로가 Windows 사용자 나 관리자에게 표시되도록하려면 OP가 명시된대로 –

7

경로를 빌드하려면 os.path.join()을 사용하십시오. 예를 들어 서면 그것을 사용하는 것이 좋습니다 슬래시없이

>>> import os.path 
>>> path = 'foo/bar' 
>>> os.path.join(path, 'filename') 
'foo/bar/filename' 
>>> path = 'foo/bar/' 
>>> os.path.join(path, 'filename') 
'foo/bar/filename' 
1

이 경로를 구축 :

os.path.join(dir, subdir, file) 

당신이 구분을 추가하거나 independly OS의 구분을 얻으려면, 다음 사용

os.sep 
+0

과 같이 많이 준비해야합니다. d가 "mydir"이면 빈 문자열이 반환됩니다. –

+0

@Ofri : 해당 섹션이 제거되었습니다. – joaquin

2

경로를 함께 추가하려면 os.path.join()을 사용해야합니다. 이 생략 된 경우 슬래시를 첨가하면서

사용

os.path.dirname(os.path.join(output_dir,'')) 

가있는 dirname를 추출한다.

관련 문제