我一直在开发一个名为Pyth的库, 它可以做到这个:
http://pypi.python.org/pypi/pyth/
将RTF文件转换成纯文本的过程大致如下:
from pyth.plugins.rtf15.reader import Rtf15Reader
from pyth.plugins.plaintext.writer import PlaintextWriter
doc = Rtf15Reader.read(open('sample.rtf'))
print PlaintextWriter.write(doc).getvalue()
Pyth也可以生成RTF文件,读写XHTML,从Python标记生成文档(类似于Nevow's stan),并且具有有限的实验性支持latex和pdf输出。它的RTF支持非常强大--我们在生产环境中使用它来读取由各种版本的Word、OpenOffice、Mac TextEdit、EIOffice等生成的RTF文件。pretty robust
pip install git+https://github.com/robertour/pyth@pyth-py3
进行安装。您可以在此处查看一些讨论(https://github.com/brendonh/pyth/pull/33/commits)。 - toto_ticoOpenOffice有一个RTF阅读器。您可以使用Python脚本OpenOffice,在此处查看更多信息。
您可能可以尝试在Windows上使用魔术COM对象来读取任何闻起来像ms-binary的东西。不过我不建议这样做。
实际解析原始数据可能并不难,请参阅此示例,该示例是用.bat / QBasic编写的。
DocFrac是一个免费的开源转换器,可在RTF、HTML和文本之间进行转换。支持Windows、Linux、ActiveX和DLL平台。将其包装到Python中可能会很容易。
RTF::TEXT::Converter - 用于将RTF转换为文本的Perl扩展。(如果您在DocFrac上遇到问题)。
微软官方的富文本格式(RTF)规范,版本1.7。
祝您好运(在您的工作环境中有限的权限下)。
如果您在 Mac
上,您可以通过终端命令将一个 RTF
文件 file.rtf
转换为 TXT
格式:
textutil -convert txt file.rtf
PyRTF-ng 0.9.1无法解析我的RTF文档,两个文档都出现了ParsingException错误。 第一个文档是由OpenOffice 3.4生成的,第二个文档是由Mac TextEdit生成的。
Pyth 0.5.6可以正常解析这两个文档,但未能正确处理西里尔字母符号。
但每个编辑器都可以正确打开另一个编辑器的文档,所以所有库似乎都对rtf支持不足。
因此,我正在使用二十一点和妓女编写自己的解析器。
(我已经上传了这两个文件,所以您可以自行检查RTF库:http://yadi.sk/d/RMHawVdSD8O9 http://yadi.sk/d/RmUaSe5tD8OD)
我刚刚发现了pyrtflib - 没有太多(或者完全没有)文档可供参考,需要安装它然后使用内置的help()函数来查找可用内容和了解每个功能的作用。
话虽如此,在我的小试验中,它的rtf.Rtf2Html.getHtml()函数表现良好。我还没有尝试过Rtf2Txt函数,但考虑到将rtf转换为纯文本的较简单性质,我希望它的表现也会很好。
有一个很好的库pyrtf-ng,可用于处理RTF。
from rtflib import *
file = RTF("helloworld.rtf")
file.startfile()
file.addstrict()
file.addtext("hello world")
file.writeout()
f = File.open('r.rtf','r')
b=0
p=false
str = ''
begin
while (char = f.readchar)
if char.chr=='{'
b+=1
next
end
if char.chr=='}'
b-=1
next
end
if char.chr=='\\'
p=true
next
end
if p==true && (char.chr==' ' or char.chr=='\n' or char.chr=='\t' or char.chr=='\r')
p=false
next
end
if p==true && (char.chr=='\'')
#this is the source of my headaches. you need to read the code page from the header and encode this.
p=false
str << '#'
next
end
next if b>2
next if p
str << char.chr
end
rescue EOFError
end
f.close
easy_install
е’Њ--user
选项安装PythonиЅЇд»¶еЊ…пјЊж— йњЂжќѓй™ђгЂ‚ - Martin Ueding