2017-06-27 80 views
1

我正在使用python3.5和lxml(以及有時用minidom)寫入和讀取xml文件。Python:在寫入xml文件時丟失內容

我有多個進程,讀取和寫入相同的XML文件和sometimse該文件變成完全空白。當我手動關閉一個進程時,會發生這種情況。

這是修改一個XML函數的例子:

from lxml import etree as le 
file = open("generalList.xml", 'r') 
tree = le.parse(file) 
file.close() 
for bad in tree.xpath("//unit"): 
    ip = bad[0].text 
    if ip == data[1]: 
     bad.getparent().remove(bad) 
file = open("generalList.xml", 'wb') 
tree.writexml(file) 
file.close() 

有沒有辦法來避免這個問題?

回答

1

您的示例可能不完整,但它看起來像是混合使用了minidom和lxml方法來編寫該文件,並且可能會生成空白文件,尤其是在您的示例中。

檢查您是否正在使用write()方法對於lxml tree對象 和writexml()用於小型對象。

編輯:

明白會發生什麼:

file = open("versions.xml", 'wb') # file is blank 

import time # add this to take a moment to check the blank file in your folder 
time.sleep(60) 

# here, if shit happens, you lose everything 

tree.write(file) # then the file is written and I/O closed 
file.close() 

你可以添加一些的try/except語句,以避免在代碼中的bug這種效果,但如果你砍的過程中,同時它的寫作=>空白文件

+0

非常感謝!明天早上我會試試,我會讓你知道 –

+0

有一個函數,我用了使用minidom寫函數的lsml,謝謝! 但是,如果我在寫入xml的過程中切斷電源,可能會丟失文件嗎? –

+0

@ G.Threepwood,我編輯答案來解釋殺害過程的危險 – PRMoureu