При взаимодействии нескольких программ, требуется передавать некоторые данные, например настройки посредством файла.
Можно для этого воспользоваться обычными текстовыми файлами и разбирать их "вручную", можно задействовать ini-файлы windows, но этот подход выглядит несколько устаревшим. Наиболее современный подход - передача данных посредством xml-файла.
Допустим имеется xml-файл следующего содержания.
<?xml version="1.0" encoding="utf-8"?>
<init>
<settings>
<set name="Set1" value="log.txt"/>
<set name="Set2" value="2"/>
</settings>
<options>
<opt name="Opt1" value="5"/>
<opt name="Opt2" value="True"/>
<opt name="Opt3" value="2.71"/>
</options>
</init>
Ниже приведена программа, позволяющая считать данные из этого файла и занести их в классы settings и options.
from xml.etree.ElementTree import ElementTree
class settings: pass
class options: pass
init = ElementTree(file='init.xml')
opts = init.find('options')
for opt in opts.findall('opt'):
name = opt.get('name')
try:
value = eval(opt.get('value'))
except:
value = opt.get('value')
setattr(options, name, value)
sets = init.find('settings')
for setting in sets.findall('set'):
name = setting.get('name')
try:
value = eval(setting.get('value'))
except:
value = setting.get('value')
setattr(settings, name, value)
for attr in dir(settings):
if not '__' in attr: print "settings.%s = %s" % (attr, str(getattr(settings, attr)))
for attr in dir(options):
if not '__' in attr: print "options.%s = %s" % (attr, str(getattr(options, attr)))
Вывод данной программы свидетельствует о правильности считывания данных:
settings.Set1 = log.txt
settings.Set2 = 2
options.Opt1 = 5
options.Opt2 = True
options.Opt3 = 2.71
Примечание. Использование функции eval небезопасно, но, если источник xml-файла надежен, это позволяет сократить код и сделать его универсальным для разных типов данных.
В другом варианте можно хранить все поля в текстовом виде, преобразуя в числовые и булевские по мере необходимости.
Комментариев нет:
Отправить комментарий