2017-01-06 34 views
1

私はさまざまなフィールドにいくつかの値を入力できるGUIプログラムを作っています。これらのフィールドのすべての情報は辞書にまとめられ、shelveモジュールを使用して保存されます。ボタンを押すだけで、すべての辞書エントリをRTFファイルに書き出すことができます。斜体で書かれたファイルの部分が必要です。Pythonで作られたRTFファイルの改行を印刷する

プログラムのGUIと棚部分は正常に動作します。私が抱えている問題は、複数の行をRTFファイルにエクスポートすることです。 RTFファイルに書きたい文字列をPythonシェルに出力すると、複数の行が表示されます。しかし、RTFにエクスポートすると、すべて1行に印刷されます。私はこれは通常\ n文字列に追加することで修正する必要がありますが、これは私のために何らかの形で働いていないことを知っています。誰かが私が間違っていることを教えてもらえますか、あるいはテキストを保存するためにイタリック体を使用できる回避策ですか?

data = dict() 
data['first'] = {'author': 'Kendall MA' 
       'year': '1987', 
       'title': 'This is a test title'} 
data['second'] = {'author': 'Mark', 
        'year': '2014', 
        'title': 'It is not working correctly'} 
rtf = open('../test.rtf', 'w') 
rtf.write(r'{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Cambria;}}') 

for key in data.keys(): 
    entry = data[key] 
    rtf.write(r'{0} ({1}): \i {2} \i0'.format(entry['author'], entry['year'], entry['title']) + '\n') 
rtf.write(r'}\n\x00') 
rtf.close() 

このコードが与えられる出力は次のとおりです:

マーク(2014):それは正しく動作していないケンドール(1987):これがある限り働く例が行くよう

テストタイトル

それがされるべきである:

マーク(2014):それは正しく

ケンドール(1987)動作していない:これはテストのタイトル

EDITです: 私は/ラインの組み合わせおよび/パー作品ということが分かりました。それらを別々に使用することは何らかの理由で私には不明です(誰かが説明できるかもしれません)。

しかし、新しいエラーが発生しました。著者が実際にリスト(['Kendall MA'、 'Powsen RB']で入力し、 '、' .join(entry ['author'])を使用して単一の文字列にする複数の著者の場合、最初の単語は途切れてしまいます。だから私は 'MA、Powsen RB'の代わりに 'Kendall MA、Powsen RB'の代わりになるだろう。誰もがなぜ、どのようにそれに対抗するかを知っていますか?

+0

プレーンテキストファイル(これはRTFファイルです)をゼロ終了する必要はないと思います... – usr2564301

答えて

1

\nは、RTFでは特別な意味を持ちません。改行を出力する場合は、\nの代わりに(または可読性のために)段落区切りにr'\line'またはr'\par'を使用する必要があります。

+1

リテラル改行も許可されています。マイクロソフトのリファレンスから:文字がバックスラッシュで始まる場合、改行文字(文字値​​13)または改行文字(文字値​​10)は\ parコントロールとして扱われます。 " (スペースに変換されているかどうかを調べるために調べてみたところ面白いです。) – usr2564301

関連する問題