Как читать и писать INI файл с Python3?
Мне нужно прочитать, написать и создать файл INI с Python3.
FILE.INI
default_path = "/path/name/"
default_file = "file.txt"
Файл Python:
# read file and if not exists
ini = iniFile( 'FILE.INI' )
# Get and Print Config Line "default_path"
getLine = ini.default_path
# Print (string)/path/name
print getLine
# Append new line and if exists edit this line
ini.append( 'default_path' , 'var/shared/' )
ini.append( 'default_message' , 'Hey! help me!!' )
UPDATE FILE.INI
default_path = "var/shared/"
default_file = "file.txt"
default_message = "Hey! help me!!"
Ответы
Ответ 1
Это может быть с чего начать:
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)
Дополнительную информацию можно найти в официальной документации .
Ответ 2
Здесь приведен полный пример чтения, обновления и записи.
Входной файл, test.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
Исходный файл ввода остается нетронутым.
Ответ 3
http://docs.python.org/library/configparser.html
В этом случае может оказаться полезной стандартная библиотека Python.
Ответ 4
Стандарт 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'
Ответ 5
ConfigObj - хорошая альтернатива ConfigParser, которая предлагает гораздо большую гибкость:
- Вложенные разделы (подразделы) на любой уровень
- Значения списков
- Несколько значений строк
- Строковая интерполяция (подстановка)
- Интегрировано с мощной системой проверки, включающей в себя автоматическую проверку/преобразование типов повторных разделов и разрешение значений по умолчанию
- При записи конфигурационных файлов ConfigObj сохраняет все комментарии и порядок членов и разделов
- Много полезных методов и возможностей для работы с файлами конфигурации (например, метод reload)
- Поддержка полного Unicode
У него есть обратная сторона:
- Вы не можете установить разделитель, он должен быть
=
... (тянуть запрос)
- У вас не может быть пустых значений, ну вы можете, но они выглядят любимыми:
fuabr =
вместо просто fubar
, который выглядит странно и неправильно.