37

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

4

10 回答 10

49

我一直在研究一个名为 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 的 stan),并且对乳胶和 pdf 输出的实验性支持有限。它的 RTF 支持非常强大——我们在生产中使用它来读取由各种版本的 Word、OpenOffice、Mac TextEdit、EIOffice 等生成的 RTF 文件。

于 2009-11-30T18:07:06.100 回答
7

OpenOffice 有一个 RTF 阅读器。您可以使用 python 编写 OpenOffice 脚本,请参阅此处了解更多信息

您可能可以尝试使用 Windows 上的魔法 com-object 来读取任何有 ms-binary 味道的东西。不过我不建议这样做。

实际上解析原始数据可能不会很困难,请参阅这个用 .bat/QBasic 编写的示例。

DocFrac是 RTF、HTML 和文本之间的免费开源转换器。提供 Windows、Linux、ActiveX 和 DLL 平台。用python将它包装起来可能很容易。

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

Microsoft 的官方富文本格式 (RTF)规范,版本 1.7。

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

于 2009-08-26T22:10:09.717 回答
5

如果您在Mac,您可以将RTF文件file.rtf转换TXTCLI

textutil -convert txt file.rtf
于 2019-08-03T18:32:20.713 回答
3

你检查过 pyrtf-ng吗?

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

于 2009-08-26T21:01:36.703 回答
2

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

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

于 2016-06-28T20:57:54.997 回答
1

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

于 2009-08-26T21:01:33.193 回答
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

于 2012-08-15T08:22:55.157 回答
1

我刚刚遇到了pyrtflib - 上面没有太多(任何)文档,这有点像安装它,然后使用内置的 help() 函数来找出可用的内容以及所有内容的功能。

话虽如此,在我对其 rtf.Rtf2Html.getHtml() 函数的小试运行中,它运行得很好。我没有尝试过 Rtf2Txt 函数,但考虑到将 rtf 转换为纯文本的更简单的性质,我期望它应该做得很好。

于 2015-04-24T08:24:15.480 回答
-2

我在尝试自己编写代码时遇到了同样的事情。这并不容易,但当我决定使用命令行应用程序时,这就是我所拥有的。它的红宝石,但你可以很容易地适应 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
于 2009-10-15T17:22:44.803 回答
-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()
于 2011-06-15T05:55:50.730 回答