Python Невозможно добавить переменную в XML - PullRequest
1 голос
/ 18 июня 2019

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

 Traceback (most recent call last):
 File "./xml.py", line 13, in <module>
 fn.text = values
 File "src/lxml/etree.pyx", line 1018, in lxml.etree._Element.text.__set__
 File "src/lxml/apihelpers.pxi", line 710, in lxml.etree._setNodeText
 File "src/lxml/apihelpers.pxi", line 698, in lxml.etree._createTextNode
 File "src/lxml/apihelpers.pxi", line 1491, in lxml.etree._utf8
TypeError: Argument must be bytes or unicode, got 'list'

Поскольку в сообщении об ошибке указано, что он должен быть в кодировке Unicode, я добавляю код

values = base64.b64encode(values)

, но он выдавал ошибки

Traceback (most recent call last):
 File "./xml.py", line 10, in <module>
   values = base64.b64encode(values)
 File "/usr/lib/python2.7/base64.py", line 54, in b64encode
   encoded = binascii.b2a_base64(s)[:-1]
 TypeError: b2a_base64() argument 1 must be string or buffer, not list

Iпопытался сделать это '' 'values ​​= [x.encode (' utf-8 ') для x в значениях]' ''

Результат показывает

<FileName>['1235362363151512d12d']</FileName>

Это не то, что яожидать.Я ожидаю, что результат будет

<FileName>1235362363151512d12d</FileName>
#!/usr/bin/python

from lxml import etree as ET
root = ET.Element("alphanumeric")
file = open("alphanumeric.txt", "r")

for aline in file:
        values = aline.split()
        length = len(values)
        child = ET.SubElement(root,"child")

        fn = ET.SubElement(child, "FileName")
        fn.text = values
        tree = ET.ElementTree(root)
tree.write("filename.xml")

x = ET.parse("filename.xml")
print ET.tostring(x, pretty_print=True)

alphanumeric.txt
7dc1f0e60f11c456aa15cc3546716c17
a78212faa38ef1078b300a492997fc02
7fa8c07634f937a1fcef9180531dc2e4
723fe720cb63189ddafde5045c4a7baf
6e670a837970a1fb4161d77d5f720d318d7e4dbc
4532b6f08b0d71893394e74e591a943bbc625f1c
3752656c024284ea63421d70235ec48d76a95df3
3f5505b9fad4cd5a1b934fee505942d28682ab91
5e7663f662cedcc2c520b88928824a4c7caf5a6833f77cdb0051328d74ace1c8
640ff11e6a0f8d95ac26e28ab6cefc29615795a646e40ce63c3ddc5f55bc165a
80b3e424c96bc9bdeafaac2a8fe2f21319663604b4b324d57c065a8a804a3a00

Я ожидаю, что результатом будет красивый XML.Но вместо этого есть ошибки, связанные с аргументами, которые должны быть байтами или юникодом.Переменная вызывает ошибку.Как правильно и способ добавить переменную в XML.

1 Ответ

2 голосов
/ 18 июня 2019

Кажется, ваше values = aline.split() утверждение является источником проблем. Попробуйте изменить цикл for таким образом и посмотрите, работает ли он:

for aline in file:       
    child = ET.SubElement(root,"child")
    fn = ET.SubElement(child, "FileName")
    fn.text = aline
    tree = ET.ElementTree(root)
...