24

すべてのプラットフォーム (少なくとも Win/Mac/Linux) でアプリ データ (構成ファイルなど) の適切なディレクトリを取得するコード スニペットが必要です。例: Windows では %APPDATA%/。

4

6 に答える 6

18

appdirs モジュールを使用してもかまわない場合は、問題が解決するはずです。(コスト = モジュールをインストールするか、Python アプリケーションに直接含める必要があります。)

于 2014-03-25T19:35:56.937 に答える
2

次の関数を使用して、ユーザー データ dir を取得できます。これは、Linux および w10 でテストされており (dir を返します)、 appdirsパッケージAppData/Localから適合されています。

import sys
from pathlib import Path
from os import getenv

def get_user_data_dir(appname):
    if sys.platform == "win32":
        import winreg
        key = winreg.OpenKey(
            winreg.HKEY_CURRENT_USER,
            r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
        )
        dir_,_ = winreg.QueryValueEx(key, "Local AppData")
        ans = Path(dir_).resolve(strict=False)
    elif sys.platform == 'darwin':
        ans = Path('~/Library/Application Support/').expanduser()
    else:
        ans=Path(getenv('XDG_DATA_HOME', "~/.local/share")).expanduser()
    return ans.joinpath(appname)

于 2020-10-04T14:15:08.817 に答える
1

このプログラムを使用するオペレーティング システムの「appdata」の場所を調査することをお勧めします。場所がわかったら、if ステートメントを使用して os と do_something() を簡単に検出できます。

import sys
if sys.platform == "platform_value":
    do_something()
elif sys.platform == "platform_value":
    do_something()
  • システム: platform_value
  • Linux (2.x および 3.x): 「linux2」
  • Windows: 「win32」
  • Windows/Cygwin: 「cygwin」
  • Mac OS X:「ダーウィン」
  • OS/2: 'os2'
  • OS/2 EMX: 'os2emx'
  • RiscOS:「リスコス」
  • AtheOS: 「アテオス」

リストは公式の Python ドキュメントからのものです。(「sys.platform」を検索)

于 2013-09-29T14:09:48.283 に答える
0

同様の問題に遭遇し、すべての Windows % パスを事前に知らなくても動的に解決したいと考えました。os.path.expandvarsパスを動的に解決するために使用できます。このようなもの:

from os import path

appdatapath = '%APPDATA%\MyApp'
if '%' in appdatapath:
    appdatapath = path.expandvars(appdatapath)
print(appdatapath)

最後の行が出力されます:C:\Users\\{user}\AppData\Roaming\MyApp これは Windows では機能しますが、Linux ではテストしていません。パスが環境によって定義されている限り、expandvars はそれを見つけることができるはずです。展開変数の詳細については、こちらをご覧ください。

于 2021-09-20T19:01:18.213 に答える