谢谢! 森
答案 0 :(得分:9)
在Windows上,您将其存储在os.environ['APPDATA']
中。但是,在Linux上,现在建议将配置文件存储在os.environ['XDG_CONFIG_HOME']
中,默认为~/.config
。因此,例如,建立在JAB的例子上:
if 'APPDATA' in os.environ:
confighome = os.environ['APPDATA']
elif 'XDG_CONFIG_HOME' in os.environ:
confighome = os.environ['XDG_CONFIG_HOME']
else:
confighome = os.path.join(os.environ['HOME'], '.config')
configpath = os.path.join(confighome, 'programname')
创建了XDG基本目录标准,以便可以将配置全部保存在一个位置,而不会使用dotfiles混乱主目录。大多数新的Linux应用都支持它。
答案 1 :(得分:4)
尝试:
os.path.expanduser('~/.programname')
在linux上,这将返回:
>>> import os
>>> os.path.expanduser('~/.programname')
'/home/user/.programname'
在Windows上,这将返回:
>>> import os
>>> os.path.expanduser('~/.programname')
'C:\\Documents and Settings\\user/.programname'
这有点难看,所以你可能想要这样做:
>>> import os
>>> os.path.join(os.path.expanduser('~'), '.programname')
'C:\\Documents and Settings\\user\\.programname'
编辑:对于它的价值,我的Windows机器上的以下应用程序在我的Documents and Settings\user
文件夹中创建其配置文件夹:
/user/.programname
而不是/home/user/.programname
。固定的。
答案 2 :(得分:1)
对LeadStorm's great answer的一些改进:
使用os.environ.get()
并使or
短路可以使代码更简单:
configpath = os.path.join(
os.environ.get('APPDATA') or
os.environ.get('XDG_CONFIG_HOME') or
os.path.join(os.environ['HOME'], '.config'),
"programname"
)
此外,如果您愿意使用外部库,xdg
package可以使Linux和Mac上的事情变得更加轻松:
import xdg.BaseDirectory as xdg
configpath = os.path.join(os.environ.get('APPDATA') or xdg.xdg_config_home,
"programname")
但这只能解决部分问题:如果该目录不存在,您仍然需要创建,对吧?
在Windows上,您是一个人。但是在Linux和Mac上,xdg.save_config_path()
为您执行os.path.join()
,和创建具有适当权限的目录,如果需要,和返回其路径,一步之遥。太棒了!
if 'APPDATA' in os.environ:
configpath = os.path.join(os.environ['APPDATA'], "programname")
os.makedirs(configpath, exist_ok=True)
else:
configpath = xdg.save_config_path("programname")
答案 3 :(得分:0)
通常,Windows上程序的配置和数据文件位于%APPDATA%目录中(或应该是),通常位于具有程序名称的子目录中。当然,“%APPDATA%”只是一个映射到当前用户的Application Data文件夹的环境变量。我不知道它是否存在于Linux上(虽然我认为它不存在),所以要跨平台(Windows / Linux / MacOS)...
import os
if 'APPDATA' in os.environ.keys():
envar = 'APPDATA'
else:
envar = 'HOME'
configpath = os.path.join(os.environ[envar], '.programname')
答案 4 :(得分:0)
使用Python的Pathlib库时的方法:
config = environ.get('APPDATA') or environ.get('XDG_CONFIG_HOME')
config = Path(config) if config else Path.home() / ".config"