2007-07-30

 

Python Cookbook 2.26 从OpenOffice文档中获取文本

需求:

你需要从OpenOffice文档中获取文本内容(保留或者不保留XML标记).

讨论:

OpenOffice是由用一系列定义好的XML文档压缩(zip)而成.要获取文档的原始信息,我们甚至可以不用安装OpenOffice:

import zipfile, re
rx_stripxml = re.compile("<[^>]*?>", re.DOTALL|re.MULTILINE)
def convert_OO(filename, want_text=True):
    """ Convert an OpenOffice.org document to XML or text. """
        zf = zipfile.ZipFile(filename, "r")
        data = zf.read("content.xml")
        zf.close( )
        if want_text:
            data = " ".join(rx_stripxml.sub(" ", data).split( ))
        return data
if _ _name_ _=="_ _main_ _":
    import sys
    if len(sys.argv)>1:
        for docname in sys.argv[1:]:
            print 'Text of', docname, ':'
            print convert_OO(docname)
            print 'XML of', docname, ':'
            print convert_OO(docname, want_text=False)
    else:
        print 'Call with paths to OO.o doc files to see Text and XML forms.'

OpenOffice文档实际上是zip文档,除了别的内容外,其中会包含content.xml,本节的目的就是要获取这个文档的信息.默认情况下,本节的代码使用简单的正则式去掉了xml标记.当然,我们可以使用一个xml解析器来获得更多的信息,可是如果只需要文本内容的话,使用最直接的方法就可以了.
正则式rx_stripxml 会匹配所有的xml标记,从"<"开始到">" 结束.在函数Convert_OO中,在if want_text后面,我们将xml标记都替换成空格,然后使用split将它拆分,最后使用"".join将其合并.基本上,使用分割-处理-合并方式将一系列空格转换为一个空字符,更多使用xml文件的方法将在12.3节中给出.


Comments: 发表评论



<< Home

This page is powered by Blogger. Isn't yours?