2016-07-22 61 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