2016-09-06 2 views
2

Если вы запускаете скрипт из/tmp/myfolder/myscript/и хотите получить доступ к ресурсу в моей папке, как вы это делаете в python?Скажите python получить доступ к ресурсам выше пути к сценарию

Я получил путь к файлу с __file__ (мне сказали не использовать его, потому что он не всегда может быть заполнен), но я не могу сделать это, как в bash, где я «cd ..», чтобы добраться до предыдущий каталог, потому что Python этого не понимает.

Я хотел бы запустить скрипт python и независимо от того, где находится папка, он всегда будет подниматься на один уровень и получать необходимый мне ресурс.

+1

Я думаю, что вы можете быть уверены, '__file__' будет заполняться в вашем случае. Итак, 'os.path.join (os.path.dirname (__ file__), '..')' - ваш лучший способ получить родительский каталог – zvone

ответ

0

Python действительно понимает cd: os.chdir(). Я не уверен, что именно то, что вы пытаетесь сделать, но вы можете попробовать:

import os 
os.chdir('..') 

Это изменит ваш рабочий каталог на один выше текущей (так же, как cd ..).

Вы также можете использовать .. для многих операций, которые используют пути. Например, если вы хотите открыть файл, который находится в одном каталоге: open('../myfile.txt') и т. Д. Вы также можете найти ответы на this question в зависимости от вашей цели.

+1

Именно то, что я искал. У меня есть сценарий, который запускается в подкаталоге моего проекта, в то время как актив находится в родительской папке, поэтому для доступа к этому элементу мне нужно идти на один уровень вверх. Это позволит мне изменить cwd, поэтому я могу получить доступ к активу, спасибо! –

+0

Я бы предпочел использовать '__file__', чем CWD. Текущий рабочий каталог действительно не обязательно должен быть там, где сценарий, например, если вы запустите 'python dirname/script.py', CWD будет на один уровень выше сценария. – zvone

0

Я не совсем понял, о чем вы говорите, но я делаю вывод, что вы говорите об интракассовых ссылках. Вы можете узнать больше об этом here, но в общей концепции вы используете from .. import module при попытке импортировать модуль из другого пакета.

В заявлении .. говорится, что компилятор поднимается на один уровень и ищет модуль с именем module. Вы можете также использовать for . import module, который будет импортировать модуль name из текущего каталога и from ../folder import module

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