ConfigParser успешно устанавливает новые значения, но не отображается в ini Python 3

У меня возникли проблемы с работой модуля анализатора конфигурации. В настоящее время я создаю программу резервного копирования файлов, но всякий раз, когда я устанавливаю значения, они не отображаются в файле .ini. config.get подтверждает правильность установки, но document_backup.ini пуст.

config = configparser.ConfigParser()
config.read('document_backup.ini')
config.set('FTP_Login','Host',input("FTP Host: "))
config.set('FTP_Login','UserName',input("FTP UserName: "))
config.set('FTP_Login','Password',input("FTP Password: "))
config.read('') #To close the file, I think

person Marco C    schedule 20.05.2017    source источник


Ответы (2)


Изменение конфигурации в памяти не влияет на файл, из которого он был изначально прочитан. Вам нужно записать новую конфигурацию обратно на диск.

config = configparser.ConfigParser()
config.read('document_backup.ini')
config.set('FTP_Login','Host',input("FTP Host: "))
config.set('FTP_Login','UserName',input("FTP UserName: "))
config.set('FTP_Login','Password',input("FTP Password: "))
with open("document_backup.ini.new", "w") as fh:
    config.write(fh)
os.rename("document_backup.ini", "document_backup.ini~")
os.rename("document_backup.ini.new", "document_backup.ini")

Обратите внимание, что модуль configparser не позволяет редактировать существующий файл конфигурации. Новый файл создаст эквивалентную конфигурацию, но может не иметь той же формы, что и оригинал.

person chepner    schedule 20.05.2017

config.read('') не закрывает файл...

Попробуйте это, это работает для меня:

config = ConfigParser.RawConfigParser()
config.add_section("MyApp")
config.set("MyApp", "window_height", self.height())
config.set("MyApp", "window_width", self.width())
configfile = open("/path/to/the/file.ini", 'w')
config.write(configfile)
configfile.close()

И чтение из него:

config = ConfigParser.RawConfigParser()
config.read("/path/to/the/file.ini")
self.width = config.getint("MyApp", "window_height")
self.height = config.getint("MyApp", "window_width")

он также работает с config.getboolean("MyApp","variable") или просто config.get("MyApp","variable") для строки

person Lubomir    schedule 20.05.2017