2017-04-19 82 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') 
相关问题