想象一下在不同子文件夹中有许多脚本的项目。
有些脚本使用临时文件夹(到达系统范围的文件夹不是问题),有些脚本从其他子文件夹加载资源,因此广泛使用./..
模式。
可以在IDE
和控制台中运行它们。在IDE中,可以很容易地为所有可运行脚本设置当前文件夹,但是当在控制台中运行时,设置当前目录,其他运行文件位置对于脚本用户来说有点痛苦。
在python
中控制加载资源的最佳方法是什么?
答案 0 :(得分:0)
您可以查看http://docs.python.org/distutils/setupscript.html#installing-package-data作为python包层次结构设置的参考。
然后,考虑使用pkg_resources来使用这些文件: http://peak.telecommunity.com/DevCenter/PkgResources#basic-resource-access
无论如何,您可以使用文件来获取包的路径:
import os
this_dir, this_filename = os.path.split(__file__)
DATA_PATH = os.path.join(this_dir, "data", "data.txt")
答案 1 :(得分:0)
对于我的情况,文件夹数量不是很大,所以我定义了resource locator
静态类。所有路径都相对计算它的文件路径。任何需要加载资源的文件,询问该类的文件夹:
import os
from enum import Enum
class ResourceType(Enum):
ConfigFile, JobsFile, OutFolder = range(3)
class ResourceLocator:
@staticmethod
def get_resource(resource_type):
file_folder = os.path.dirname(__file__)
out_folder = file_folder + "/../out/"
config_folder = file_folder + "/../config/"
path = ""
if resource_type == ResourceType.ConfigFile:
path = os.path.abspath(config_folder + "config.ini")
elif resource_type == ResourceType.JobsFile:
path = os.path.abspath(config_folder + "jobs.ini")
elif resource_type == ResourceType.OutFolder:
path = os.path.abspath(out_folder) + "/"
if not os.path.exists(path):
os.makedirs(path)
return path