Добавление стилей форматирования RTF - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь добавить форматирование и текст в конец моего файла RTF.

Я могу написать в свой файл, но добавление не работает. Это делает весь документ пустым. Я все еще новичок в Python (вроде 5 часов), но это был бы хороший проект для этого языка. Возможно, это связано с корректной очисткой или закрытием документа? Или, может быть, даже синтаксис для добавления через r ''?

import os

filename = 'list.rtf'

if os.path.exists(filename):
    append_write = 'a'
else:
    append_write = 'w'

myfile = open(filename,append_write)
myfile.write(r'{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset1 Arial;}}')
myfile.write(r'\b People \b0\line')
myfile.write(r'{\fonttbl{\f0\fswiss\fcharset1 Georgia;}}')
myfile.write(r'\i John \i0\line')
myfile.close()

1 Ответ

0 голосов
/ 29 октября 2018

Вам не нужно открывать отдельные режимы для «добавления» и «записи», так как '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 должен встречаться только один раз.)

...