2016-07-22 93 views
1

我有一個專利文檔,它是一個文本文檔中連接字符串的xml文件。我正在尋找將它分成單獨的文檔,每個單獨的XML文件。我的代碼有效,但我需要加快速度。我的代碼是這樣的:加速讀取xml文件

import time 

count = 0 

filestr = '' 

line = 'x' 

start_time = time.time() 
with open('C:/Users/RNCZF01/Documents/Cameron-Fen/Economics-Projects/Patent-project/similarity/Patents/ipg121225.xml') as txtfile: 
while line:   
    line = txtfile.readline() 
    if '<?xml version="1.0" encoding="UTF-8"?>' in line: 
     filestr = str(count) + '.xml' 
     count += 1 

    with open('C:/Users/RNCZF01/Documents/Cameron-Fen/Economics-Projects/Patent-project/similarity/Patents/2012-12-25/' + filestr, 'ab') as textfile: 
     textfile.write(line) 
     textfile.write('\n') 

print("--- %s seconds ---" % (time.time() - start_time)) 

我可以想到加速它的一個優化是if語句。它檢查該行是否包含xml頭文件:<?xml version="1.0" encoding="UTF-8"?>。如果我可以檢查該行是否爲<?xml version="1.0" encoding="UTF-8"?>,則可能會明顯更快。但是當我寫if line == '<?xml version="1.0" encoding="UTF-8"?>':它並沒有拿起線。我是否需要在最後包含\n?有沒有其他的優化可以加速這個過程?謝謝,

卡梅倫

+0

這個文件有多大?你能否將它全部加載到內存中並分割文檔聲明? – Thtu

+0

另外:我很想聽聽你的專利XML文件遵循什麼XML模式。 – kjhughes

+0

所以我現在正在測試它的一小部分文件,但總文件是23GB。我不認爲我可以訪問羣集,但不確定。我可以對它進行多線程處理,這是我會做的,但對其他優化很感興趣。至於XML模式,我不確定,但是這裏是一個示例文件的鏈接:https://drive.google.com/open?id=0B2Kz5NTvWjJud3VGQS16Rks4alU。我從谷歌專利頁面下載了這些文件:https://www.google.com/googlebooks/uspto-patents-grants-text.html – www3

回答

1

而不是檢查每一行,您可能希望加載整個文件內容和執行蟒蛇正則表達式模式匹配。這樣您將減少步驟來檢查並通過調用方法findall()來獲得所有匹配。

這裏是文檔鏈接 - https://docs.python.org/3/howto/regex.html

+0

這對23GB數據有效嗎?我不認爲我會擁有那麼多的記憶。我想我可以把它分開,然後按順序或者其他的做。如果沒有其他的東西,我只是爲了我自己的教育而閱讀。謝謝! – www3