2016-12-03 3 views
-1

Я создал проект, где мой сценарий main.py находится в корневой папке Project. У меня есть каталог utils внутри, и я хочу получить путь к этому каталогу. Я сделал функцию, которая экономит .pdf файл в моем каталоге Utils: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

Эти функции помогут вам извлечь информацию * о * пути, а не * define * путь. –

ответ

0

Что вам нужно, это определить путь. И вы можете сохранить его относительным.

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

yourFullFileName = yourPath+yourFileName 

и, наконец,

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

UPDATE

После небольшого курса Скотт Хантер дал мне, (сравни его комментарий) Я загладить. Отсюда следует, что правильный путь, чтобы построить свой путь является:

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' эквивалентны (предполагая, что вам не следует, что '/' является разделителем путей). –

+0

@ScottHunter. «Принимая, [...], что'/'является разделителем путей», вы имеете в виду, что я должен использовать 'os.sep'? Я думал, что символ косой черты всегда работает, когда используется в относительных дорожках, для любых os вообще. Разве это не так? – Kanak

+0

Ваш обновленный комментарий - это решение. Спасибо. – allocer

Смежные вопросы