我想要一个代码片段,它可以在所有平台(至少是Win / Mac / Linux)上获取应用数据(配置文件等)的正确目录。例如:Windows上的%APPDATA%/。
答案 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()
列表来自the official Python docs。 (搜索'sys.platform')