Каков правильный способ автоматизации использования ElementTree в Python?

Я использую Python для создания некоторых файлов XML, которые используются другим устройством. У меня есть решение, которое работает, но я пытаюсь его улучшить. Одна из вещей, которые должен содержать XML, - это расписание. Вот что должно выглядеть запись в понедельник в XML.


У меня нет проблем с созданием этого с ElementTree в Python, но сейчас я застрял, имея строку кода для каждого дня. Итак, фрагмент моего кода на Python выглядит так:

SubElement(schedule, 'Monday', open='08:00', close='17:00')
SubElement(schedule, 'Tuesday', open='08:00', close='17:00')
.
.
.
SubElement(schedule, 'Sunday', open='08:00', close='17:00')

Файл xml завершит работу с несколькими расписаниями, и, набрав все это, кажется излишне повторяющимся. Вместо этого я хотел создать функцию, которая выполняет итерацию над списком, чтобы создать параметры для перехода к SubElement. В рамках этой функции я создал эту строку, чтобы заменить время в вызове SubElement.

"open=" + "\'08:00\'" + ", " + "close=" + "\'17:00\'"

Если я распечатаю это, он выглядит идентично тому, что я передаю SubElement, когда я печатаю код длинным путем. Однако это явно не то же самое, что я получаю следующую ошибку при попытке запустить скрипт.

File "C:\Python27\lib\xml\etree\ElementTree.py", line 528, in SubElement
   attrib = attrib.copy()
AttributeError: 'str' object has no attribute 'copy'

Я просмотрел код SubElement и, похоже, ожидает словарь. Тем не менее, когда я печатаю вещи длинным путем, я, кажется, не поставляю словарь в качестве входных данных, либо поэтому не могу понять, почему функция должна принимать этот ввод, но не строку, которая для меня представляется эквивалентной , Есть ли способ делать то, что я пытаюсь сделать, или я придерживаюсь много повторяющихся строк кода?

0
nl ja de

1 ответы

Вы должны передать словарь атрибутов вместо «строки атрибутов» в SubElement, что-то вроде:

SubElement(schedule, 'Sunday', {'open': '08:00', 'close': '17:00'})

или

times = {'open': '08:00', 'close': '17:00'}
SubElement(schedule, 'Sunday', times)
1
добавлено
SubElement интерпретирует все «неизвестные» аргументы ключевого слова как пары «ключ-значение» для словаря атрибутов, что означает, что SubElement (a, «b», attrib = {«c»: «d»} , e = "f") равен SubElement (a, "b", {"c": "d", "e": "f"})
добавлено автор abbot, источник
Это отлично работает. Я все еще не совсем понимаю, почему это требуется. С одной стороны, это, безусловно, удовлетворяет требованию ввода словаря SubElement, и с этой точки зрения это имеет смысл. С другой стороны SubElement казался вполне счастливым, когда я использовал его в этой форме: «SubElement (расписание,« понедельник », open = '08: 00 ', close = '17: 00') 'Это не похоже на словарь для меня, и все же у меня не было ошибок, когда я использовал его. Почему он должен работать таким образом вообще? Похоже, если вам нужен словарь в качестве входных данных, вам всегда нужно будет вводить данные в эту форму.
добавлено автор user1721015, источник
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community