Как читать и писать INI файл с Python3?
мне нужно читать, писать и создавать INI файл с Python3.
.INI
default_path = "/path/name/"
default_file = "file.txt"
Python File:
# Read file and and create if it not exists
config = iniFile( 'FILE.INI' )
# Get "default_path"
config.default_path
# Print (string)/path/name
print config.default_path
# Create or Update
config.append( 'default_path', 'var/shared/' )
config.append( 'default_message', 'Hey! help me!!' )
обновлено
5 ответов:
Это может быть что-то начинать с:
import configparser config = configparser.ConfigParser() config.read('FILE.INI') print(config['DEFAULT']['path']) # -> "/path/name/" config['DEFAULT']['path'] = '/var/shared/' # update config['DEFAULT']['default_message'] = 'Hey! help me!!' # create with open('FILE.INI', 'w') as configfile: # save config.write(configfile)вы можете найти больше на официальная документация configparser.
вот полный пример чтения, обновления и записи.
входной файл, тест.ini
[section_a] string_val = hello bool_val = false int_val = 11 pi_val = 3.14рабочий код.
try: from configparser import ConfigParser except ImportError: from ConfigParser import ConfigParser # ver. < 3.0 # instantiate config = ConfigParser() # parse existing file config.read('test.ini') # read values from a section string_val = config.get('section_a', 'string_val') bool_val = config.getboolean('section_a', 'bool_val') int_val = config.getint('section_a', 'int_val') float_val = config.getfloat('section_a', 'pi_val') # update existing value config.set('section_a', 'string_val', 'world') # add a new section and some values config.add_section('section_b') config.set('section_b', 'meal_val', 'spam') config.set('section_b', 'not_found_val', 404) # save to a file with open('test_update.ini', 'w') as configfile: config.write(configfile)выходной файл, test_update.ini
[section_a] string_val = world bool_val = false int_val = 11 pi_val = 3.14 [section_b] meal_val = spam not_found_val = 404исходный входной файл остается нетронутым.
http://docs.python.org/library/configparser.html
стандартная библиотека Python может быть полезна в этом случае.
стандартный
ConfigParserобычно требуется доступ черезconfig['section_name']['key'], что не весело. Небольшая модификация может обеспечить доступ к атрибутам:class AttrDict(dict): def __init__(self, *args, **kwargs): super(AttrDict, self).__init__(*args, **kwargs) self.__dict__ = self
AttrDict- это класс, производный отdictкоторый позволяет получить доступ как через ключи словаря, так и через доступ к атрибутам: это означаетa.x is a['x']мы можем использовать этот класс в
ConfigParser:config = configparser.ConfigParser(dict_type=AttrDict) config.read('application.ini')и теперь мы получаем
application.iniС:[general] key = valueкак
>>> config._sections.general.key 'value'
ConfigObj является хорошей альтернативой ConfigParser, который предлагает гораздо больше гибкости:
- вложенные разделы (подразделы), на любом уровне
- список значений
- несколько значений строки
- строку интерполяции (замена)
- интегрирован с мощной системой проверки, включая автоматическую проверку типа / преобразование повторяющихся разделов и позволяя значения по умолчанию
- при записи конфигурационных файлов, ConfigObj сохраняет все комментарии и порядок членов и разделов
- много полезных методов и опций для работы с конфигурационными файлами (например, метод 'reload')
- полная поддержка Unicode
Он имеет некоторые недостатки:
- вы не можете установить разделитель, он должен быть
=... (pull-запрос)- вы не можете иметь пустые значения, ну вы можете, но они выглядят как: просто
fubarчто выглядит странно и неправильно.
Comments