Python:文件夹使用方式

时间:2017-04-15 19:41:41

标签: python architecture directory project

想象一下在不同子文件夹中有许多脚本的项目。

有些脚本使用临时文件夹(到达系统范围的文件夹不是问题),有些脚本从其他子文件夹加载资源,因此广泛使用./..模式。

可以在IDE和控制台中运行它们。在IDE中,可以很容易地为所有可运行脚本设置当前文件夹,但是当在控制台中运行时,设置当前目录,其他运行文件位置对于脚本用户来说有点痛苦。

python中控制加载资源的最佳方法是什么?

2 个答案:

答案 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