Мы работаем с репозиторием кода, который развертывается как для Windows, так и для Linux - иногда в разных каталогах. Как один из модулей внутри проекта ссылается на одну из ресурсов, отличных от Python в проекте (файлы CSV и т. Д.)?Как относиться к относительным путям ресурсов при работе с репозиторием кода в Python
Если мы делаем что-то вроде:
thefile=open('test.csv')
или:
thefile=open('../somedirectory/test.csv')
Он будет работать только тогда, когда скрипт запускается из одной конкретной директории или подмножества каталогов.
То, что я хотел бы сделать что-то вроде:
path=getBasePathOfProject()+'/somedirectory/test.csv'
thefile=open(path)
Является ли это правильный путь? Является ли это возможным?
Я думаю, что это решение будет работать только если ресурс находится в том же каталоге файла питона, или в подкаталоге этого. Как вы решаете, когда вы имеете следующую древовидную структуру: /Project_Root_dir /python_files_dir /Некоторые другие подкаталоги здесь py_file.py /ресурсы /некоторые подкаталоги здесь resource_file.csv – olamundo
К сожалению, файл дерево получило искаженные на этом последнем сообщении ... вторая попытка: у вас есть файл /Project_Root_dir/python_files_dir/some_subdirs/py_file.py, и у вас есть файл ресурсов в /Project_Root_dir/resources/some_subdirs/resource_file.csv – olamundo
Вы должны быть в состоянии получить в родительский каталог, используя join (foo, '..'). Поэтому из/root/python_files/module/myfile используйте os.path.join (os.path.dirname ('__file__'), '..', '..', 'resources') – c089