Это изменит ваш текущий рабочий каталог на так, чтобы открывающиеся относительные пути работали:
import os
os.chdir("/home/udi/foo")
Однако вы спросили, как перейти в каталог, в котором находится ваш скрипт Python, даже если вы этого не сделаете. Я не знаю, какой это каталог, когда вы пишете свой скрипт. Для этого вы можете использовать функции os.path
:
import os
abspath = os.path.abspath(__file__)
dname = os.path.dirname(abspath)
os.chdir(dname)
Это принимает имя файла вашего скрипта, преобразует его в абсолютный путь, затем извлекает каталог этого пути, а затем переходит в этот каталог .
Не делайте этого.
Ваши сценарии и ваши данные не должны быть помещены в один большой каталог. Поместите свой код в известное место ( site-packages
или / var / opt / udi
или что-то в этом роде) отдельно от ваших данных. Используйте хороший контроль версий в своем коде, чтобы быть уверенным, что текущая и предыдущая версии отделены друг от друга, чтобы вы могли вернуться к предыдущим версиям и протестировать будущие версии.
Итог: не смешивайте код и данные.
Данные бесценны. Код приходит и уходит.
Укажите рабочий каталог в качестве значения аргумента командной строки. Вы можете указать значение по умолчанию в качестве переменной среды. Не делайте выводов (и не догадывайтесь)
Сделайте это обязательным значением аргумента и сделайте это.
import sys
import os
working= os.environ.get("WORKING_DIRECTORY","/some/default")
if len(sys.argv) > 1: working = sys.argv[1]
os.chdir( working )
Не «предполагайте» каталог, основанный на расположении вашего программного обеспечения. В долгосрочной перспективе это не сработает.