Форум сайта python.su
0
Привет,
кто поможет разобраться с записью не латинских знаков при записи через tree.write(xmlfile)
Сначала беру текст из csv файла и занопу в tuple:
try: with open(sys.argv[1],"r" ) as csvfile: emails = csv.reader(csvfile, delimiter=b';') for row in emails: pn_tuple.append(row) except IOError as e: print(e.errno, e.strerror) print("Cannot open file",sys.argv[1])
root = ET.Element("log") root.set("action","add") pn = len(pn_tuple) for i in range(len(pn_tuple)): xtag_mailbox = ET.SubElement(root,"mailbox") xtag_login = ET.SubElement(xtag_mailbox,"login") xtag_login.text = pn_tuple[i][0] xtag_fname = ET.SubElement(xtag_mailbox, "firstname") xtag_fname.text = pn_tuple[i][3]
tree = ET.ElementTree(root) with open("file.xml", "w+", encoding='utf-8') as file: tree.write(file, xml_declaration=True, encoding='utf-8')
Traceback (most recent call last): File "./mail.py", line 133, in <module> tree.write(file, xml_declaration=True, encoding='utf8') File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 820, in write serialize(write, self._root, encoding, qnames, namespaces) File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 939, in _serialize_xml _serialize_xml(write, e, encoding, qnames, None) File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 939, in _serialize_xml _serialize_xml(write, e, encoding, qnames, None) File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 937, in _serialize_xml write(_escape_cdata(text, encoding)) File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 1073, in _escape_cdata return text.encode(encoding, "xmlcharrefreplace") UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 4: ordinal not in range(128)
'Lenka', 'Do\xc4\x8dkalov\xc3\xa1'
Отредактировано gelo (Окт. 19, 2013 14:53:13)
Офлайн
253
Желательно в пока данные находятся в памяти везде использовать unicode
Поэтому может быть ваше:
with open(sys.argv[1],"r" ) as csvfile:
import codecs with codecs.open(sys.argv[1],"r",'utf-8') as csvfile:
with open(sys.argv[1],"r",'utf-8') as csvfile:
Отредактировано doza_and (Окт. 19, 2013 16:26:14)
Офлайн
857
doza_andтретьим аргументом идёт буферизация
или для 3.xwith open(sys.argv[1],"r",'utf-8') as csvfile:
Отредактировано py.user.next (Окт. 19, 2013 20:13:23)
Офлайн
253
py.user.nextмда сказывается привычка я всегда явно указываю, а сейчас не указал по лени…
третьим аргументом идёт буферизация
with open(sys.argv[1], "r", encoding='utf-8') as csvfile:
Офлайн