2013-11-25 3 views
1

У меня возникла проблема с написанием XML-файла. Я конвертирую CSV-файл в DICT, а затем в файл XML. У меня проблема с кодировкой.Python XML write UnicodeDecodeError

import xml.etree.ElementTree as ET 
import csv 

data = {} 

with open('csv.csv', 'r') as csvfile: 
    spamreader = csv.reader(csvfile, delimiter=';') 
    for row in spamreader: 

     data[row[2]] = {'category': row[0], 
        'ean': row[2], 
        } 

katalog  = ET.Element('Katalog') 

for item in data: 
    ean_kod  = ET.SubElement(vyrobek,'EAN') 
    ean_kod.text  = data[item]['ean'] 

if ET.ElementTree(katalog).write('testunicode.xml',encoding="UTF-8",xml_declaration=True): 
    print "Ulozeno." 

Когда я пытаюсь написать XML в файл, эта ошибка appers:

Traceback (most recent call last): 
    File "/media/CORSAIR/TEST/Eshop/macenauer_complete.py", line 95, in <module> 
    if ET.ElementTree(katalog).write('testunicode.xml',encoding="UTF-8",xml_declaration=True): 
    File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 821, in write 
    serialize(write, self._root, encoding, qnames, namespaces) 
    File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 940, in _serialize_xml 
    _serialize_xml(write, e, encoding, qnames, None) 
    File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 940, in _serialize_xml 
    _serialize_xml(write, e, encoding, qnames, None) 
    File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 938, in _serialize_xml 
    write(_escape_cdata(text, encoding)) 
    File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1074, in _escape_cdata 
    return text.encode(encoding, "xmlcharrefreplace") 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 10: ordinal not in range(128) 

ответ

0

Попробуйте открыть файл CSV с заданной кодировкой слишком

with open('csv.csv', 'r', encoding='UTF-8') as csvfile: 
+0

TraceBack (самый последний вызов в прошлом) : Файл «/media/CORSAIR/TEST/Eshop/macenauer_complete.py», строка 7, в с открытым ('csv.csv', 'r', encoding = 'UTF-8') в виде csvfile: TypeError: 'encoding' является недопустимым аргументом ключевого слова для этой функции – user3030743