0

Python で configobj を使用しているときに、パスに少し問題があります。ヘルパー ファイルで絶対パスを使用しない方法があるかどうか疑問に思っています。たとえば、次の代わりに:

self.config = ConfigObj('/home/thisuser/project/common/config.cfg')

私は次のようなものを使いたい:

self.config = ConfigObj(smartpath+'/project/common/config.cfg')

背景: 構成ファイルを、ヘルパー クラスとユーティリティ クラスと一緒に共通のディレクトリに配置しました。

common/config.cfg
common/helper.py
common/utility.py

ヘルパー クラスには、config のセクション内の値を返すメソッドがあります。コードは次のとおりです。

from configobj import ConfigObj

class myHelper:

    def __init__(self):
        self.config = ConfigObj('/home/thisuser/project/common/config.cfg')

    def send_minion(self, race, weapon):
        minion = self.config[race][weapon]
        return minion

ユーティリティ ファイルはヘルパー ファイルをインポートし、ユーティリティ ファイルはプロジェクトのさまざまなフォルダーに配置された一連のさまざまなクラスによって呼び出されます。

from common import myHelper

class myUtility:

    def __init__(self):
        self.minion = myHelper.myHelper()

    def attack_with_minion(self, race, weapon)
        my_minion = self.minion.send_minion(race, weapon)
        #... some common code used by all
        my_minion.login()

次のファイルは、ユーティリティ ファイルをインポートし、メソッドを呼び出します。

/home/thisuser/project/folder1/forestCastle.py
/home/thisuser/project/folder2/secondLevel/sandCastle.py
/home/thisuser/project/folder3/somewhere/waterCastle.py

self.common.attack_with_minion("ogre", "club")

絶対パスを使用せずに forestCastle.py を実行すると、/home/thisuser/project/folder1/で構成が検索され、/home/thisuserが変更されるため、 project/common/で検索する必要があります。

4

2 に答える 2

0

代わりに、モジュール ファイル名に基づいて新しい絶対パスを計算できます。

import os.path
from configobj import ConfigObj

BASE = os.path.dirname(os.path.abspath(__file__))


class myHelper:

    def __init__(self):
        self.config = ConfigObj(os.path.join(BASE, 'config.cfg'))

__file__現在のモジュールのファイル名helper.pyです/home/thisuser/project/common/helper.pyos.path.abspath()絶対パスであることを確認しos.path.dirname、ファイル名を削除し/helper.pyて、「現在の」ディレクトリへの絶対パスを残します。

于 2013-02-25T16:13:04.163 に答える
0

私はあなたが実際に望んでいることに従うのに少し苦労しています. ただし、OSに依存しない方法でホームディレクトリへのパスを展開するには、次を使用できますos.path.expanduser

self.config = ConfigObj(os.path.expanduser('~/project/common/config.cfg'))
于 2013-02-25T16:13:20.593 に答える