2016-12-03 2 views
-1

main.py 스크립트가 루트 폴더 Project에있는 프로젝트를 만들었습니다. 내부에 utils 디렉토리가 있고이 디렉토리의 경로를 가져 오려고합니다. 내 UTILS 디렉토리에 .pdf 파일을 저장하는 기능을했다 :Python - 프로젝트의 디렉토리에 경로를 설정합니다.

with open(os.path.abspath('utils/' + self.object.object_name+ '.pdf'), 'wb') as f: 
       f.write(pdf) 

을하지만 오류 얻을 :

IOError: [Errno 2] No such file or directory: '/home/documents/office/projects/me/utils/d.pdf'

가 어떻게 그것을 올바른 방법으로 할 os.path.abspath을 변경할 수 있습니다?
나는 항상 utils 디렉토리에 들어가고 싶다.

+0

'abspath'는 제공된 경로의 절대 경로를 제공합니다. 가능하면 할 수있는 일을 왜 바꾸어야합니까? 다른 디렉토리가 필요하면 제공/계산하십시오. 'abspath'는 도움이되지 않습니다. –

+0

나는'os.path.basename' 또는'os.path.dirname'을 사용하여 그 utils 디렉토리를 어디에서든지 호출 할 수 있다고 생각합니다. – allocer

+0

이 함수는 정보를 추출합니다. * 경로를 정의합니다. –

답변

0

필요한 것은 경로를 정의하는 것입니다. 그리고 당신은 그것을 상대적으로 유지할 수 있습니다. 작은 물론 스콧 헌터 다음

yourPath = './utils/' 
yourFileName = self.object.object_name+ '.pdf' 

yourFullFileName = yourPath+yourFileName 

마지막

with open(yourFullFileName, 'wb') as f: 
      f.write(pdf) 

UPDATE

은 (자신의 의견을 CF) 내가 보상하게, 내게 준. 경로를 작성하는 올바른 방법은 다음과 같습니다.

working_dir = os.path.dirname(__file__)# __file__ is the full name of your working script 
yourFullFileName = os.path.join(working_dir, 'util', self.object.object_name + "." + 'pdf') 

이렇게하면 (운영 체제 종속적 인) 분리 기호에 대한 가정은 없습니다.

+0

이것은 경로를 만드는 방법이 아니며'./utils'와'utils'는 동등합니다 ('/'는 경로 구분자입니다). @ScottHunter. –

+0

"[...]로 가정하면,'/'는 경로 구분자입니다.'os.sep'를 사용해야합니까? 슬래시 문자는 상대 경로에서 사용될 때 항상 작동한다고 생각했습니다. 그렇지 않은가요? – Kanak

+0

업데이트 된 의견은 해결책입니다. 고마워. – allocer

관련 문제