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__如何幫助您訪問其他文件夾中的資源? –