理想的には、インストールにスーパーユーザー アクセスを必要としないモジュールまたはライブラリが必要です。私の作業環境では、権限が制限されています。
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 の読み取りと書き込み、Nevow のスタンのような Python マークアップからのドキュメントの生成も行うことができ、latex および 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 に問題がある場合)。
公式のリッチ テキスト形式 (RTF)の仕様、バージョン 1.7、マイクロソフト。
頑張ってください (あなたの作業環境での限られた権限で)。
pyrtf-ngをチェックアウトしましたか?
更新: Subversion チェックアウトを行うと、解析機能を利用できますが、それがどの程度の機能を備えているかはわかりません。(rtfng.parser.base
モジュールを見てください。)
正規表現を使用して rtf をテキストに変換するスクリプトへのリンクは次のとおりです: RTF 文字列からテキストを抽出するための正規表現
また、github の更新されたリンク: Github リンク
PyRTF-ng 0.9.1 は私の RTF ドキュメントを解析していません。どちらも ParsingException が発生しています。最初のドキュメントは OpenOffice 3.4 で生成され、2 番目のドキュメントは 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 をプレーンテキストに変換するという単純な性質を考えると、うまくいくはずです。
汎用の RTF 処理に適したライブラリpyrtf-ngがあります。
逆に、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()
自分でコーディングしようとしていたのと同じことに遭遇しました。それほど簡単ではありませんが、コマンドライン アプリを使用することを決めたときに私が持っていたものは次のとおりです。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