2016-08-26 15 views
2

xmlファイルに書き込もうとしています。私はコード内の特定の要素を変更し、それを正常に印刷できるようにしています。ファイルの構造を変更することなく、ファイルに書き込む必要があります。
私のコード:私は、開口部の様々な方法を試してみて、ファイルを閉じるときPythonがxmlファイルに書き込む

import os 
from lxml import etree 


directory = '/Users/eeamesX/work/data/expert/EFTlogs/20160725/IT' 
XMLParser = etree.XMLParser(remove_blank_text=True) 
for f in os.listdir(directory): 
    if f.endswith(".xml"): 

     xmlfile = directory + '/' + f 



     tree = etree.parse(xmlfile, parser=XMLParser) 
     root = tree.getroot() 

     hardwareRevisionNode = root.find(".//hardwareRevision") 



     if hardwareRevisionNode.text == "5": 
      print " " 
      print "Old Tag: " + hardwareRevisionNode.text 

      x = hardwareRevisionNode.text = "DVT2" 

      print "New Tag " + hardwareRevisionNode.text 

、それだけでxmlファイル内のすべてのデータが削除されます。このメソッドを使用します。

私のファイルのコード構造を長い行に変更しました。

+0

かなりプリンターや圧子はlxmlのであります。それは次のようになります。 1つの長い文字列が完全に有効なxmlです。この質問を参照してください。http://stackoverflow.com/questions/749796/pretty-printing-xml-in-python – WombatPM

答えて

2

あなたはその後、使用している既存のXMLファイル内の値を置き換えるために欠けている場合は、次の

tree.write(xmlfile) 

現在、あなたは、単に完全にあなたのファイルを上書きし、間違った方法(open())を使用しています。 tree.write()は通常あなたが使いたいものです。

tree = etree.parse(xmlfile, parser=XMLParser) 
root = tree.getroot() 
hardwareRevisionNode = root.find(".//hardwareRevision") 
if hardwareRevisionNode.text == "5": 
    print "Old Tag: " + hardwareRevisionNode.text 
    hardwareRevisionNode.text = "DVT2" 
    print "New Tag: " + hardwareRevisionNode.text 
    tree.write(xmlfile) 

https://docs.python.org/2/library/xml.etree.elementtree.html

+0

私はそれを底に置く必要があり、それは完璧に働いた – Anekdotin

2

出力ファイルに改行を入れるには、殺菌(writeまたはtostring)の呼び出しにpretty_print=Trueを渡す必要があるようです。

サイドノート;通常、Pythonでファイルを開くと、次のようにファイルが開かれます。

with open('filename.ext', 'mode') as myfile: 
    myfile.write(mydata) 

このようにすると、ファイル記述子のリークが発生する危険性が少なくなります。 tree.write("filename.xml")メソッドは、ファイルを完全に処理することを避けるためのすてきで簡単な方法のように見えます。

+0

tree = etree.parse(xmlfile、parser = XMLParser) root = tree.getroot() tree.write hardwareRevisionNode = root.find( ".// hardwareRevision") – Anekdotin

+0

これを変更すると、ファイルは1行になり、テキストは置き換えられません。 – Anekdotin

+0

上記のスニペットで元のツリーを再保存しています。改行問題の私の編集された答えを見てください。 – pnovotnak

関連する問題