2017-04-15 59 views
0

想象一下在不同子文件夹中有许多脚本的项目。Python:文件夹使用风格

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

可以在IDE和控制台中运行它们。在IDE中,为所有可运行的脚本设置当前文件夹非常容易,但是在控制台中运行时,请设置当前目录,而其他运行文件位置对脚本用户来说有点麻烦。

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

回答

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 
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") 
+0

__file__如何帮助您访问其他文件夹中的资源? –