Как хранить переменные/предпочтения в Python для последующего использования

Я работаю над программой в Python для Windows и хотел бы сохранить переменные и пользовательские настройки, чтобы я мог вспомнить их даже после завершения и перезапуска программы.

есть ли идеальный способ сделать это на машинах Windows? Бы _winreg и реестр Windows подходит для этой задачи? Или мне нужно создать какую-то базу себе?

7 ответов


обычно вы хотите сохранить его в папке конфигурации в папке "home". Это легко в системах * nix, сложнее в windows, потому что вам действительно нужно получить каталог "данные приложения". Это обычно работает для меня:

import os
if os.name != "posix":
    from win32com.shell import shellcon, shell
    homedir = "{}\".format(shell.SHGetFolderPath(0, shellcon.CSIDL_APPDATA, 0, 0))
else:
    homedir = "{}/".format(os.path.expanduser("~"))

после того, как у вас есть homedirectory, вы должны создать папку с именем вашего проекта:

if not os.path.isdir("{0}.{1}".format(homedir,projectname)):
    os.mkdir("{0}.{1}".format(homedir,projectname))

затем вы можете сделать конфигурационный файл в этой папке и записать в него свои параметры в выбранном вами формате (мой личный фаворит находится в XML).


вместо python2 есть ConfigParser, который является configparser, в Python3:

import ConfigParser, os

config = ConfigParser.ConfigParser()
config.readfp(open('defaults.cfg'))
config.read(['site.cfg', os.path.expanduser('~/.myapp.cfg')])

даже в windows вы должны знать, что реестр-это жалкий улей отбросов и злодейства, и что вы не должны использовать его для хранения конфигураций приложений python.


Если я чего-то не хватает, regex не имеет ничего общего с реестром windows. Просто сохраните файл конфигурации где-нибудь, например, домашний каталог пользователя или что-то еще. По крайней мере, это то, что я бы сделал в linux. Храните файл где-нибудь в ~/.config/


Если вы хотите сохранить только пары "ключ-значение" настроек, сделайте это в текстовом конфигурационном файле. Если вы хотите сохранить структуры python, сделайте это с помощью pickle или shelve. Если вам нужен свет, хлопот бесплатно, РСУБД использовать sqlite.


С pickle модуль-очевидный выбор, файлы, которые он пишет, будут нечеловечески читаемыми. Для файлов конфигурации было бы хорошо, если бы ваш файл конфигурации был простым текстовым форматом, который ваши пользователи могут читать или даже редактировать. Итак, я рекомендую вам использовать JSON и json модуль.


есть несколько путей, разделенных на два основных направления

  • доступ к реестру Windows с помощью _winreg модуль.

использование реестра нетривиально передавать настройки на другую машину или проверять их или создавать резервные копии; вам придется использовать regedit для тех, кто.

другой способ сохранить настройки в файле в папке "Мои документы" пользователя. Это упрощает перемещение настроек на другой компьютер или пользователя, и не смешивать настройки программы и множество других приложений. Поэтому такие вещи, как резервное копирование и восстановление, проще; вы просто копируете один файл. Если вы выбираете текстовый формат, также проще проверить и отладить настройки.

  • Поместите свои настройки в список, кортеж или словарь и сохраните их с помощью cPickle модуль. Это, вероятно, один из самых простых методов. С другой стороны, хотя маринованные данные по умолчанию используют формат ASCII, это не так удобочитаемый.
  • использовать ConfigParser модуль для сохранения и загрузки файлов конфигурации в аналогичной структуре, как Windows'.ini файлы. Эти файлы читаются человеком.
  • использовать json модуль для хранения настроек в формате json. Эти файлы читаются человеком.
  • сохраните настройки в виде выражений Python в текстовый файл, загрузите его с помощью execfile(). N. B. Это может использоваться для выполнения произвольного кода, поэтому есть соображения безопасности. Но с другой стороны, это очень легко и читабельно.

для сохранения переменных я рекомендую использовать огурец