想象一下在不同子文件夹中有许多脚本的项目。Python:文件夹使用风格
一些脚本使用临时文件夹(不是问题到达系统范围的文件夹),有些从其他子文件夹加载资源,所以./..
模式被广泛使用。
可以在IDE
和控制台中运行它们。在IDE中,为所有可运行的脚本设置当前文件夹非常容易,但是在控制台中运行时,请设置当前目录,而其他运行文件位置对脚本用户来说有点麻烦。
在python
中控制加载资源的最佳方法是什么?
想象一下在不同子文件夹中有许多脚本的项目。Python:文件夹使用风格
一些脚本使用临时文件夹(不是问题到达系统范围的文件夹),有些从其他子文件夹加载资源,所以./..
模式被广泛使用。
可以在IDE
和控制台中运行它们。在IDE中,为所有可运行的脚本设置当前文件夹非常容易,但是在控制台中运行时,请设置当前目录,而其他运行文件位置对脚本用户来说有点麻烦。
在python
中控制加载资源的最佳方法是什么?
对于我的情况下,文件夹计数不是很大,所以我定义了静态类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
你可以看看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")
__file__如何帮助您访问其他文件夹中的资源? –