2017-01-06 32 views
1

我製作了一個GUI程序,可以在各個字段中輸入一些值。所有來自這些字段的信息都會合併到一個字典中,然後使用擱置模塊進行存儲。通過按下按鈕,我可以將所有字典條目導出到RTF文件中,因爲我希望文件的部分格式爲斜體。在用Python製作的RTF文件中打印新行

該程序的GUI和擱置部分工作得很好。我遇到的問題是將多行導出到RTF文件。當我將要寫入RTF文件的字符串打印到python shell中時,我得到了多行。但是當我將它導出到RTF時,它全部打印在一行上。我知道這通常應該通過向字符串添加一個\ 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):這是測試標題

編輯: 我發現/線/ PAR作品的組合。單獨使用它們並不是因爲我不清楚的原因(也許有人可以解釋?)。

但是發生了新的錯誤。當作者實際上是多個作者時,我通過list(['Kendall MA','Powsen RB'])輸入,然後使用','.join(entry ['author'])作爲單個字符串,第一個字被切斷。所以我會得到 'MA,Powsen RB'而不是'Kendall MA,Powsen RB'。有誰知道爲什麼以及如何對付它?

+0

我不認爲真的有必要零終止一個純文本文件(這是一個RTF文件)... – usr2564301

回答

1

\n在RTF中沒有特殊含義。如果要輸出換行符,則需要使用r'\line'r'\par'來代替段落(或除了爲了便於閱讀)\n

+1

字面換行符也是允許的。從微軟的參考資料中可以看出:「如果字符前面有一個反斜槓,那麼回車符(字符值爲13)或換行符(字符值爲10)將被視爲\ par控件;必須包含反斜槓;否則,RTF將忽略控制字「。 (我查看它是否轉換爲空格,這是一個有趣的補充。) – usr2564301