2017-04-15 17 views
0

異なるサブフォルダに多数のスクリプトがあるプロジェクトを想像してください。Python:フォルダの使用方法

一部のスクリプトでは、一時フォルダ(システム全体のフォルダに届くように問題はありません)が使用されますが、一部のリソースは他のサブフォルダからロードされるため、./..パターンが広く使用されます。

IDEとコンソールの両方で実行できます。 IDEでは、すべての実行可能スクリプトの現在のフォルダを設定するのは簡単ですが、コンソールで実行する場合は、runnedファイルの場所を現在のディレクトリに設定するのはスクリプトユーザーにとっては苦労します。

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__が他のフォルダのリソースにアクセスするのに役立つのですか? –

関連する問題