我有兩個包含大量項目的大型XML文件(c.100MB)。我想輸出他們之間的差異。Python比較XML文件
每個項目都有一個ID,我需要檢查它是否在兩個文件中。如果是,那麼我需要比較該物品的各個值,以確定它是同一物品。
SAX解析器是解決這個問題的最好方法,它是如何使用的?我使用了元素樹,並找到了哪些工作在較小的文件上,但現在我無法處理大文件。
srcTree = ElementTree()
srcTree.parse(srcFile)
# finds all the items in both files
srcComponents = (srcTree.find('source')).find('items')
srcItems = srcComponents.findall('item')
dstComponents = (dstTree.find('source')).find('items')
dstItems = dstComponents.findall('item')
# parses the source file to find the values of various fields of each
# item and adds the information to the source set
for item in srcItems:
srcId = item.get('id')
srcList = [srcId]
details = item.find('values')
srcVariables = details.findall('value')
for var in srcVariables:
srcList.append((var.get('name'),var.text))
srcList = tuple(srcList)
srcSet.add(srcList)
向我們展示你寫 – wroniasty 2012-07-30 10:51:58
失敗的代碼它將所有內容加載到內存中,因此它不適用於這些文件。我使用元素樹來獲取每個xml文件中的數據樹。我在樹上使用find來獲取所有項目到列表中。然後,我循環這些項目以獲取每個項目的值並將信息存儲在一組元組中:[(id,val,val),(id,val,val)]。我爲這兩個文件做了這個。找到這些集合的差異,然後將結果存儲在一個文件中。 – charlie123 2012-07-30 10:59:32