Некоторые улучшения по сравнению с Отличный ответ LeadStorm :
Код может быть проще, используя 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
может еще больше упростить работу в 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()
do 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")