是否有用于将RTF转换为纯文本的Python模块?

时间:2009-08-26 20:56:59

标签: python text rtf

理想情况下,我想要一个不需要超级用户访问权限的模块或库;我在工作环境中的权限有限。

10 个答案:

答案 0 :(得分:47)

我一直在研究名为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,生成来自Nevow's stan的Python标记的文档,并且对乳胶和pdf输出的实验支持有限。它的RTF支持是pretty robust - 我们在生产中使用它来读取由各种版本的Word,OpenOffice,Mac TextEdit,EIOffice和其他版本生成的RTF文件。

答案 1 :(得分:8)

OpenOffice有一个RTF阅读器。您可以使用python编写OpenOffice脚本,see here for more info

你可能会尝试在Windows上使用魔术com对象来读取任何闻起来像ms-binary的东西。我不建议这样做。

实际上解析原始数据可能不会很难,see this example用.bat / QBasic编写。

DocFrac是RTF,HTML和文本之间的免费开源转换器。 Windows,Linux,ActiveX和DLL平台可用。将它包装在python中可能非常容易。

RTF::TEXT::Converter - 用于将RTF转换为文本的Perl扩展。 (如果您在使用DocFrac时遇到问题)。

Microsoft的官方RTF格式(RTF)Specifications,版本1.7。

祝你好运(在你的工作环境中享有有限的特权)。

答案 2 :(得分:3)

你签出了pyrtf-ng吗?

更新:如果您进行Subversion结帐,则可以使用解析功能,但我不确定它的功能是多么全面。 (查看rtfng.parser.base模块。)

答案 3 :(得分:2)

以下是使用正则表达式将rtf转换为文本的脚本的链接: Regular Expression for extracting text from an RTF string

另外,github上的更新链接: Github link

答案 4 :(得分:1)

用于通用RTF处理的库pyrtf-ng很好。

答案 5 :(得分:1)

PyRTF-ng 0.9.1没有使用ParsingException解析任何我的RTF文档。 第一个文档是使用OpenOffice 3.4生成的,第二个文档是使用Mac TextEdit生成的。

Pyth 0.5.6解析两个文档没有问题,但没有正确处理西里尔符号。

但是每个编辑器都能正确地打开其他编辑器文档并且没有问题,所以所有库似乎都有一个弱的rtf支持。

所以我正在用二十一点和妓女写自己的解析器。

(我上传了这两个文件,因此您可以自行检查RTF库:http://yadi.sk/d/RMHawVdSD8O9 http://yadi.sk/d/RmUaSe5tD8OD

答案 6 :(得分:1)

我刚刚遇到pyrtflib - 其中没有太多(任何)文档,有点安装它然后使用内置的help()函数来查找什么是可用的,什么都可以。

在我的rtf.Rtf2Html.getHtml()函数的小试运行中说它运行得很好。我还没有尝试过Rtf2Txt函数,但考虑到将rtf转换为纯文本的简单性,我应该做得很好。

答案 7 :(得分:1)

如果您使用的是Mac,则可以将RTF的{​​{1}}文件file.rtfTXT转换为CLI,例如:

textutil -convert txt file.rtf

答案 8 :(得分:0)

我碰到了同样的事情,我试图自己编码。这并不容易,但这就是我决定使用命令行应用程序时的情况。它的红宝石,但你可以很容易地适应python。 有一些标题垃圾要清理,但你可以看到或多或少的想法。

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

答案 9 :(得分:-1)

相反,如果您想从Python轻松编写RTF,可以使用第三方模块rtflib。这是一个相当新的和不完整的模块,但仍然非常强大和有用。下面是一个将富文本中的“hello world”写入名为helloworld.rtf的RTF的示例。这是一个非常原始的示例,该模块还可用于向RTF文件添加颜色,斜体,表格和富文本的许多其他方面。

from rtflib import *
file = RTF("helloworld.rtf")
file.startfile()
file.addstrict()
file.addtext("hello world")
file.writeout()