@Oleg569

LXML сохранение элемента в файл в кодировке UTF-8?

Обрабатываю файл ФИАС - AS_ADDROBJ_ и хочу оставить записи только определенного региона
В XML содержимое такого рода
<Object AOID="358b18ea-6b14-4cf7-a81c-16d2708675e9" AOGUID="9fe26a94-e444-4672-8d45-1cf3723579ea" PARENTGUID="918e0485-8f3a-436a-850b-aab31512abcf" FORMALNAME="Лермонтова" OFFNAME="Лермонтова" SHORTNAME="ул" AOLEVEL="7" REGIONCODE="25" AREACODE="011" AUTOCODE="0" CITYCODE="000" CTARCODE="000" PLACECODE="022" PLANCODE="0000" STREETCODE="0016" EXTRCODE="0000" SEXTCODE="000" PLAINCODE="250110000220016" CODE="25011000022001600" CURRSTATUS="0" ACTSTATUS="1" LIVESTATUS="1" CENTSTATUS="0" OPERSTATUS="1" IFNSFL="2502" IFNSUL="2502" TERRIFNSFL="2521" TERRIFNSUL="2521" OKATO="05223000003" OKTMO="05623404101" POSTALCODE="692485" STARTDATE="1900-01-01" ENDDATE="2079-06-06" UPDATEDATE="2017-07-21"/>


Если обрабатываю таким кодом
xml_path ='/tmp/update/AS_ADDROBJ_20170724_963df8ba-e5b8-402d-91cf-2bf43c49c069.XML'    
    cnt = 1
    fp = open('Test.xml', 'wb')
    fp.write("<?xml version=\"1.0\" encoding=\"utf-8\"?><AddressObjects>")
    for action, elem in etree.iterparse(xml_path,tag='Object'):       
        if elem.attrib['REGIONCODE']=='12':
            cnt += 1            
            et = elem.getroottree()            
            et.write(fp, pretty_print=True, xml_declaration=False,encoding='utf-8')
            elem.clear()
        # Also eliminate now-empty references from the root node to <Title>
            while elem.getprevious() is not None:
                 del elem.getparent()[0]
    print cnt
    fp.write("</AddressObjects>")
    fp.close()

То на выходе в полученный файл попадают значения не относящиеся к 12 региону
Если же
xml_path ='/tmp/update/AS_ADDROBJ_20170724_963df8ba-e5b8-402d-91cf-2bf43c49c069.XML'    
    cnt = 1
    fp = open('Test.xml', 'wb')
    fp.write("<?xml version=\"1.0\" encoding=\"utf-8\"?><AddressObjects>")
    for action, elem in etree.iterparse(xml_path,tag='Object'):       
        if elem.attrib['REGIONCODE']=='12':
            cnt += 1 
            et = etree.ElementTree(elem)
            et.write(fp, pretty_print=True, xml_declaration=False,encoding='utf-8')
            elem.clear()
        # Also eliminate now-empty references from the root node to <Title>
            while elem.getprevious() is not None:
                 del elem.getparent()[0]
    print cnt
    fp.write("</AddressObjects>")
    fp.close()

То в файл сохраняются записи в формате Unicode(например поля FORMALNAME,OFFNAME) -
<Object AOID="0cb5e0ae-4db7-45fc-991e-1cd7d088d439" AOGUID="b01fcbe9-5734-4654-b60f-1a90c776ff69" PARENTGUID="d2944a73-daf4-4a08-9b34-d9b0af7785a1" NEXTID="3bd085b4-fd58-41de-85c0-0c4679709647" FORMALNAME="&#x421;&#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x430;&#x44F;" OFFNAME="&#x421;&#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x430;&#x44F;" SHORTNAME="&#x443;&#x43B;" AOLEVEL="7" REGIONCODE="11" AREACODE="000" AUTOCODE="0" CITYCODE="001" CTARCODE="000" PLACECODE="000" PLANCODE="0000" STREETCODE="0305" EXTRCODE="0000" SEXTCODE="000" PLAINCODE="110000010000305" CURRSTATUS="1" ACTSTATUS="0" LIVESTATUS="0" CENTSTATUS="0" OPERSTATUS="1" IFNSFL="1101" IFNSUL="1101" OKATO="87401000000" OKTMO="87701000" POSTALCODE="167009" STARTDATE="1900-01-01" ENDDATE="2017-01-09" UPDATEDATE="2017-07-20"/>

Как сделать сохранение элемента в исходном виде
  • Вопрос задан
  • 221 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы