想象一下在不同子文件夾中有許多腳本的項目。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__如何幫助您訪問其他文件夾中的資源? –