Вам не нужно открывать отдельные режимы для «добавления» и «записи», так как 'a'
также будет работать с новыми файлами. Тем не менее, вам все равно нужно проверить, существует ли файл, потому что если он это сделает, он уже будет иметь обязательный заголовок RTF. Поэтому проверьте и сохраните это значение в логическом значении.
RTF-файл начинается с {\rtf
и всегда должен заканчиваться }
, поэтому, если вы хотите добавить что-то «в конце», вы должны удалить последний символ. Самый простой способ - переместить указатель файла в конец минус 1 и использовать truncate
. Затем вы можете добавить любую допустимую последовательность RTF (кроме заголовка файла, если он есть) и, наконец, всегда добавлять }
в конце.
В коде:
import os
filename = 'list.rtf'
writeHeader = not os.path.exists(filename)
with open(filename,'a') as myfile:
if writeHeader:
myfile.write(r'{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset1 Arial;}{\f1\fswiss\fcharset1 Georgia;}}')
else:
myfile.seek(-1,2)
myfile.truncate()
# your new text comes here
myfile.write(r'\b Bob \b0\line')
myfile.write(r'\f1\i Fred \i0\line')
# all the way to here
# and then write the end marker
myfile.write('}')
(Я также исправил ваш \fonttbl
код, чтобы вы могли установить шрифт для Georgia с помощью \f1
. \fonttbl
должен встречаться только один раз.)