configparser
не хранит комментарии, так что вы застряли на этом, если только вы не не используете этот модуль ... Или вы можете извлечь комментарии и затем повторно внедрить их в файл(теряя позицию комментариев, но сохраняя содержимое)
Чтобы не потерять конфигурацию в случае ошибки (переполнение диска или другое), вы можете сохранить другое имя, удалить текущий файл и переименовать.
conf_file = 'config.ini'
with open(conf_file+'.bak', 'w') as configfile:
config.write(configfile)
if os.path.exists(conf_file):
os.remove(conf_file) # else rename won't work when target exists
os.rename(conf_file+'.bak',conf_file)
этот метод безопасен.Если файл не может быть записан, предыдущий файл не засорен.В худшем случае (если кто-то потянет штекер в момент точного , когда исходный файл будет удален), файл .bak
(с соответствующим новым содержимым) останется.
Альтернативой может бытьпереименуйте существующий INI-файл, запишите новый и удалите старый INI-файл, если файл был успешно записан.
Все операции выполняются на одном диске, поэтому больше нет доступа к диску (за исключениемпереименование), даже если файл огромен.