Как сохранять данные Python?
Хочу сохранить некоторые данные пользователя моей программы. Например, настройки программы, которые юзер укажет по-своему.
Стоит ли использовать Json файлы? Или для простой программы есть какие-то другие способы?
Ну, например, хочу сохранить что-то подобное:
path = 'C:/Users/user'
theme = 'white'
sounds = True
Это для примера. Просто текстовый файл делать не хочу, и не совсем понимаю, как сохранить данные для программы
UPD:
По итогу у меня получилось что-то подобное, не знаю, насколько это верное решение, но у меня теперь всё работает:
Main.py
import configparser
GENERAL = {
'config_file': 'config.ini'
}
configuration = {
'Game_path': '',
'Direct_path': '',
'Theme': 'Light'
}
# Data write, Data read
# Path - choose data element
# obj - object to replace
# state - 'w'= write (replace data element)
def data(path=None, obj=None, state=None):
config = configparser.ConfigParser()
config.read(GENERAL['config_file'])
if state == 'w': # Change values in config.ini
config[path[0]][path[1]] = obj
with open(GENERAL['config_file'], state) as configfile:
config.write(configfile)
else:
# Your code to read
print(config['Configuration']['Theme'])
config.ini
[Configuration]
game_path = 0
direct_path = 0
theme = Dark
Ответы (2 шт):
JSON возможно наиболее удобен:
- Понятный формат, близкий к словарю питона
- Файл можно читать и редактировать "вручную" в любом редакторе
- Легко сохранять и читать в коде программы на Python (да и на других языках)
import json
settings = {
'path': 'C:/Users/user',
'theme': 'white',
'sounds': True,
}
with open('settings.json', 'w') as f:
json.dump(settings, f)
with open('settings.json', 'r') as f:
settings1 = json.load(f)
print(settings1['path'])
Вывод:
C:/Users/user
Сохранённый файл settings.json выглядит так:
{"path": "C:/Users/user", "theme": "white", "sounds": true}
Исторический стандарт это ini файлы
ini файл поддерживает только строки насколько я знаю. числа, bool, datetime надо сериализовать, чтоб они загружались в свой тип. Не поддерживает вложенные словари и массивы.
json не годится для взаимодействия с пользователем. Он очень чувствителен к структуре. Хоть пользователи и технари, очень часто забывают запятую или поcтавят лишнюю. Много проблем с кавычками и экранированием строк.
Используйте toml или yaml как человечные альтернативы json.
>>> import toml
>>> data = dict(path = 'C:/Users/user',theme = 'white',sounds = True)
>>> print(toml.dumps(data))
path = "C:/Users/user"
theme = "white"
sounds = true
Работа с toml и yaml практически не отличается от json
import toml
settings = {
'path': 'C:/Users/user',
'theme': 'white',
'sounds': True,
}
with open('settings.ini', 'w') as f:
toml.dump(settings, f)
with open('settings.ini', 'r') as f:
settings1 = toml.load(f)
print(settings1['path'])