用Python在RTF文件中打印新行

2024-06-07 23:03:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经做了一个图形用户界面程序,我可以在不同的领域输入一些值。然后,这些字段中的所有信息被合并到一个字典中,然后使用shelve模块存储该字典。只需按一下按钮,我就可以将所有字典条目导出到一个RTF文件中,因为我希望文件的某些部分采用斜体格式。在

程序的GUI和shelve部分工作正常。我遇到的问题是将多行导出到RTF文件。当我将要写入RTF文件的字符串打印到pythonshell中时,会得到多行。但当我把它导出到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):它不能正常工作Kendall(1987):这是一个测试标题

它应该是:

马克(2014):它工作不正常

肯德尔(1987):这是一个测试题目

编辑: 我发现/line和/par的组合是有效的。单独使用它们并不是因为某些我不清楚的原因(也许有人可以解释?)。在

但是出现了一个新的错误。当作者实际上是多个作者时,我通过list(['Kendall MA','Powsen RB'])输入,然后使用“,”.join(entry['author'])将第一个单词截断。所以我会得到 “妈,波森RB”而不是“Kendall MA,Powsen RB”。有人知道为什么和如何反击吗?在


Tags: 文件程序data字典titleyearshelvewrite
1条回答
网友
1楼 · 发布于 2024-06-07 23:03:23

\n在RTF中没有特殊含义。如果要输出换行符,则需要使用r'\line'或{}作为段落分隔符,而不是(或除此之外,为了可读性)\n。在

相关问题 更多 >

    热门问题