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节中给出.
你需要从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节中给出.