2017-04-19 50 views
-1

我正在學習如何在Python中使用xml,並且卡住了。 我需要不包含已刪除元素從文件中讀取XML,以eleminate元素(屬性id = 1),並重寫XML ...這是代碼:從xml中刪除一個元素並寫入一個文件 - Python - lxml

from lxml import etree as le 

file = open("default.xml", 'r') 
     tree = le.parse(file) 
     file.close() 
     for cams in tree.xpath("//camera[@id=\'1\']"): 
      cams.getparent().remove(cams) 
     file = open("default.xml", 'w') 
     #tree = le.tostring(tree, pretty_print=True, xml_declaration=True) 
     file.write(le.tostring(tree, pretty_print=True, xml_declaration=True)) 
     file.close() 

我得到這個錯誤:類型錯誤:寫()參數必須海峽,而不是字節

這是XML文件:

<?xml version="1.0" ?><settings> 
    <modifica>0</modifica> 
    <source>0</source> 
    <soglie> 
     <diffPerson>19</diffPerson>  
    </soglie> 
    <size> 
     <onePerson>4</onePerson> 
     <twoPersons>7</twoPersons> 
     <blobSize>10</blobSize> 
     <dimBordoBlob>0</dimBordoBlob> 
    </size> 
    <invertX>0</invertX> 
    <invertY>0</invertY> 
    <feedback>1</feedback> 
    <camere> 
     <camera id="1"> 
      <larghezza>55</larghezza> 
      <altezza>100</altezza> 
      <ip>192.168.2.226</ip> 
      <posizione>1</posizione> 
      <offsetX>0</offsetX> 
      <offsetY>22</offsetY> 
      <port>5601</port> 
     </camera> 
    <camera id="2"> 
     <larghezza>55</larghezza> 
     <altezza>100</altezza> 
     <ip>192.168.2.226</ip> 
     <posizione>0</posizione> 
     <offsetX>45</offsetX> 
     <offsetY>0</offsetY> 
     <port>5600</port> 
    </camera> 
</camere> 
    <room> 
     <tipo>1</tipo> 
     <larghezzaCm>4000</larghezzaCm> 
     <altezzaCm>1500</altezzaCm> 
    </room> 
    <udpOut> 
     <ip>192.168.2.253</ip> 
     <port>3030</port> 
    </udpOut> 
    <udpIn> 
     <ip>192.168.2.245</ip> 
     <port>5050</port> 
    </udpIn> 
    <settings> 
     <life>10</life> 
    </settings> 
    <master>1</master> 
    <masterIP>192.168.2.245</masterIP> 
</settings> 

回答

0

爲timeloss好難過。

的解決方案是設置

file = open("default.xml", 'wb') 

代替:

file = open("default.xml", 'w') 
相關問題