Python:以跨平台的方式获取AppData文件夹

时间:2013-09-29 14:07:24

标签: python appdata

我想要一个代码片段,它可以在所有平台(至少是Win / Mac / Linux)上获取应用数据(配置文件等)的正确目录。例如:Windows上的%APPDATA%/。

4 个答案:

答案 0 :(得分:9)

如果您不介意使用appdirs module,它应该可以解决您的问题。 (cost =您需要安装模块或直接将其包含在Python应用程序中。)

答案 1 :(得分:4)

Qt的QStandardPaths documentation列出了这样的路径。

使用Python 3.8

import sys
import pathlib

def get_datadir() -> pathlib.Path:

    """
    Returns a parent directory path
    where persistent application data can be stored.

    # linux: ~/.local/share
    # macOS: ~/Library/Application Support
    # windows: C:/Users/<USER>/AppData/Roaming
    """

    home = pathlib.Path.home()

    if sys.platform == "win32":
        return home / "AppData/Roaming"
    elif sys.platform == "linux":
        return home / ".local/share"
    elif sys.platform == "darwin":
        return home / "Library/Application Support"

# create your program's directory

my_datadir = get_datadir() / "program-name"

try:
    my_datadir.mkdir(parents=True)
except FileExistsError:
    pass

Python documentation建议使用sys.platform.startswith('linux')“成语”,以便与返回“ linux2”或“ linux3”之类的旧版本Python兼容。

答案 2 :(得分:1)

您可以使用以下函数来获取用户数据目录,该目录是在appdirs包中改编的,该目录在linux和w10上进行了测试(返回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)

答案 3 :(得分:0)

我建议您在要使用此程序的操作系统中研究“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:'darwin'
  • OS / 2:'os2'
  • OS / 2 EMX:'os2emx'
  • RiscOS:'riscos'
  • AtheOS:'atheos'

列表来自the official Python docs。 (搜索'sys.platform')