理想情况下,我想要一个不需要超级用户访问权限的模块或库;我在工作环境中的权限有限。
答案 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.rtf
从TXT
转换为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()