有没有一个Python模块可以将RTF转换为纯文本?

40
理想情况下,我希望有一个模块或库,不需要超级用户权限即可安装;在我的工作环境中,我有限制的特权。

3
您可以使用easy_install和--user选项安装Python软件包,无需权限。 - Martin Ueding
这个答案是最好的...它对我非常有效!! - Anwarvic
10个回答

50

我一直在开发一个名为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


14
很遗憾它不兼容Python 3 ;-( - Epoc
4
@Epoc,有一些工作是为了使它与Python 3兼容。我在我的存储库中有一个分支,您可以使用pip install git+https://github.com/robertour/pyth@pyth-py3进行安装。您可以在此处查看一些讨论(https://github.com/brendonh/pyth/pull/33/commits)。 - toto_tico
1
到了2022年,“pyth”仍然只适用于Python 2,并且自2014年以来没有发布过更新。 - Flimm

7

OpenOffice有一个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。

祝您好运(在您的工作环境中有限的权限下)。


谢谢。我在OpenOffice中打开了文档并将其保存为纯文本文件。这可能是最简单的方法。还要感谢您提醒我这是我的工作环境。我已经请求sudo访问权限。 - Tony
2
RTF::TEXT::Converter的链接已经失效。Python邮件列表上的讨论链接也是如此。这就是为什么不鼓励使用链接回答的原因... - GreenAsJade
1
谢谢指出,我修复了一个链接。不幸的是,另一个链接必须被删除。 - Paweł Polewicz
DocFrac仍然可以使用,但不支持pt-br特殊字符。 - Alan Tygel
1
微软的RTF规范现在位于:http://download.microsoft.com/download/5/d/d/5dd33fdf-91f5-496d-9884-0a0b0ee698bb/%5BMS-OXRTFEX%5D.pdf - Julian Mehnle
1
@JulianMehnle 看起来这只是扩展,而不是完整的规范。完整的规范在 https://interoperability.blob.core.windows.net/files/Archive_References/[MSFT-RTF].pdf。 - Mark Ransom

4

如果您在 Mac 上,您可以通过终端命令将一个 RTF 文件 file.rtf 转换为 TXT 格式:

textutil -convert txt file.rtf

3
你有没有看过pyrtf-ng
更新:如果你进行Subversion checkout,解析功能是可用的,但我不确定它有多全面。 (查看rtfng.parser.base模块。)

2

1

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


1
链接失效了,你还有它们吗? - n611x007

1

我刚刚发现了pyrtflib - 没有太多(或者完全没有)文档可供参考,需要安装它然后使用内置的help()函数来查找可用内容和了解每个功能的作用。

话虽如此,在我的小试验中,它的rtf.Rtf2Html.getHtml()函数表现良好。我还没有尝试过Rtf2Txt函数,但考虑到将rtf转换为纯文本的较简单性质,我希望它的表现也会很好。


我已经尝试了Rtf2Txt.getText()函数,它运行良好 - 我的使用并不是详尽的边缘情况折磨测试,但我测试的所有情况都给出了我期望的输出。 - Blair

1

有一个很好的库pyrtf-ng,可用于处理RTF。


谢谢,但是 pyrtf-ng 的问题在于它适用于生成 RTF 文件,而不是解析它们。我从它的 SourceForge 页面下载了它(在 Google Code 的下载选项卡下没有任何东西),这是我能找到的唯一功能。 - Tony
@Tony,你看过http://code.google.com/p/pyrtf-ng/source/browse/#svn/trunk/rtfng/parser吗?当Google Code托管的项目还没有下载时,请浏览源代码!-) - Alex Martelli

-2
相反地,如果你想要从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()

-2
我也遇到了同样的问题,当时我试图自己编写代码。这并不容易,但是当我决定使用命令行应用程序时,我有了以下的Ruby代码,你可以很容易地将其适配到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

Pascal和Python...在同一个代码中! - USERNAME GOES HERE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接