Я хочу проанализировать xml-файл в utf-8 и отсортировать его по некоторому полю. Soring выполняется с помощью пользовательского алфавита (s1 от исходного кода). История вопроса находится здесь: sorting of list containing utf-8 charachters. Я нашел способ сортировки xml here. Сортировка работу правильно, проблема с ElementTree, я должен признать, что он не работает на Python3parse xml с elementtree, пользовательская сортировка
Вот исходный код:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#import xml.etree.ElementTree as ET # Python 2.5
import elementtree.ElementTree as ET
s1='aáàAâÂbBcCçÇdDeéEfFgGğĞhHiİîÎíīıIjJkKlLmMnNóoOöÖpPqQrRsSşŞtTuUûúÛüÜvVwWxXyYzZ'
s2='11111122334455666aabbccddeeeeeeffgghhiijjkklllllmmnnooppqqrrsssssttuuvvwwxxyy'
trans = str.maketrans(s1, s2)
def unikey(seq):
return seq[0].translate(trans)
tree = ET.parse("tosort.xml")
container = tree.find("entries")
data = []
for elem in container:
keyd = elem.findtext("k")
data.append((keyd, elem))
print (data)
data.sort(key=unikey)
print (data)
container[:] = [item[-1] for item in data]
tree.write("sorted.xml", encoding="utf-8")
Вот instructions импортировать модуль ElementTree. Когда я импортировать модуль таким образом: import xml.etree.ElementTree as ET
, я получаю сообщение:
Traceback (most recent call last):
File "pcs.py", line 19, in <module>
container[:] = [item[-1] for item in data]
File "/usr/lib/python3.1/xml/etree/ElementTree.py", line 210, in __setitem__
assert iselement(element)
AssertionError
Когда я использую этот метод для импорта: import elementtree.ElementTree as ET
, я получаю это сообщение:
Traceback (most recent call last):
File "pcs.py", line 4, in <module>
import elementtree.ElementTree as ET
File "/usr/local/lib/python3.1/dist-packages/elementtree/ElementTree.py", line 794, in <module>
_escape = re.compile(eval(r'u"[&<>\"\u0080-\uffff]+"'))
File "<string>", line 1
u"[&<>\"\u0080-\uffff]+"
^
SyntaxError: invalid syntax
Я использую Python 3.1.3 (r313: 86834, 28.11.2010, 11:28:10). В python2.6 elementtree работает без проблем.
Содержание tosort.xml:
<xdxf>
<entries>
<ar><k>zaaaa</k>definition1</ar>
<ar><k>şaaaa</k>definition2</ar>
...
...
</entries>
</xdxf>
В первом блоке кода есть проблемы с отступом внутри 'for', вы можете исправить это, чтобы соответствовать фактическому запущенному вами коду? –
Кроме того, я думаю, что проблема может заключаться в том, что 's2' по-прежнему содержит символы, отличные от ASCII, и это испортит сортировку. –
О, извините. Я исправил это. второй код с символами, отличными от ASCII, работает хорошо. Я думаю, что что-то не так с кодировкой inout, но я не могу понять. – microspace