我有一个需要存储用户数据的python桌面应用程序。在Windows上,这通常位于%USERPROFILE%\Application Data\AppName\
,在OSX上通常为~/Library/Application Support/AppName/
,而在其他* nix上通常为~/.appname/
。
标准库中存在一个函数os.path.expanduser
,它将获取用户的主目录,但我知道在Windows上,至少“应用程序数据”已本地化为用户的语言。 OSX也许如此。
获取此位置的正确方法是什么?
更新 一些进一步的研究表明,在OSX上获得这个的正确方法是使用函数NSSearchPathDirectory,但这是Cocoa,所以它意味着调用PyObjC桥......
答案 0 :(得分:42)
好吧,我讨厌回答我自己的问题,但似乎没有其他人知道。我正在为后代留下答案。
APPNAME = "MyApp"
import sys
from os import path, environ
if sys.platform == 'darwin':
from AppKit import NSSearchPathForDirectoriesInDomains
# http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/func/NSSearchPathForDirectoriesInDomains
# NSApplicationSupportDirectory = 14
# NSUserDomainMask = 1
# True for expanding the tilde into a fully qualified path
appdata = path.join(NSSearchPathForDirectoriesInDomains(14, 1, True)[0], APPNAME)
elif sys.platform == 'win32':
appdata = path.join(environ['APPDATA'], APPNAME)
else:
appdata = path.expanduser(path.join("~", "." + APPNAME))
答案 1 :(得分:13)
有一个小模块可以做到这一点:
答案 2 :(得分:5)
您可以尝试使用Qt中的QSettings
。您可以通过以下方式获取MyCompany / MyApp.ini文件的路径:
from PySide.QtCore import QSettings, QCoreApplication
QSettings.setDefaultFormat(QSettings.IniFormat)
QCoreApplication.setOrganizationName("MyCompany")
QCoreApplication.setApplicationName("MyApp")
settings = QSettings()
print(settings.fileName())
或者,不改变任何全局状态:
QSettings(
QSettings.IniFormat, QSettings.UserScope,
"MyCompany", "MyApp"
).fileName()
在Win7上你会得到类似的东西:
C:\Users\MyUser\AppData\Roaming\MyCompany\MyApp.ini
在Linux上(可能会有所不同):
/home/myuser/.config/MyCompany/MyApp.ini
我不知道OSX的可能结果(但我想)。
QSettings
函数似乎很好,直到你想使用PySide中没有的registerFormat
,因此没有简单的方法可以使用YAML或JSON编写器进行设置。
答案 3 :(得分:1)
好吧,对于Windows APPDATA(环境变量)指向用户的“Application Data”文件夹。但不确定OSX。
在我看来,正确的方法是在每个平台的基础上进行。