理想情况下,我想要一个不需要超级用户访问权限来安装的模块或库;我在工作环境中的特权有限。
10 回答
我一直在研究一个名为 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 文件。
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。
祝你好运(在您的工作环境中享有有限的特权)。
如果您在Mac
,您可以将RTF
文件file.rtf
转换TXT
为CLI
:
textutil -convert txt file.rtf
你检查过 pyrtf-ng吗?
更新:如果您进行 Subversion 签出,则可以使用解析功能,但我不确定它的功能是否齐全。(查看rtfng.parser.base
模块。)
这是使用正则表达式将 rtf 转换为文本的脚本的链接: Regular Expression for extracting text from an RTF string
另外,更新了 github 上的链接: Github 链接
有一个很好的库pyrtf-ng用于通用 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 转换为纯文本的更简单的性质,我期望它应该做得很好。
我在尝试自己编写代码时遇到了同样的事情。这并不容易,但当我决定使用命令行应用程序时,这就是我所拥有的。它的红宝石,但你可以很容易地适应 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
相反,如果您想从 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()