附加 RTF 格式样式
Appending RTF formatting styles
我正在尝试将格式和文本附加到我的 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()
您不需要为 'append' 和 'write' 使用单独的模式打开,因为 'a'
也可以使用新文件。但是,您仍然需要检查该文件是否存在,因为如果存在,它将已经具有强制性 RTF header。所以检查这个值并将其存储在布尔值中。
RTF 文件以 {\rtf
开头并且必须始终以 }
结尾,因此如果您想添加某些内容 "at the end",则必须删除最后一个字符。最简单的方法是将文件指针移动到末尾减1,然后使用truncate
。然后你可以添加任何有效的 RTF 序列(文件 header 除外,如果有的话),最后总是在末尾添加 }
。
在代码中:
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
代码,因此您可以使用 \f1
将字体设置为格鲁吉亚。\fonttbl
只需出现一次。)
我正在尝试将格式和文本附加到我的 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()
您不需要为 'append' 和 'write' 使用单独的模式打开,因为 'a'
也可以使用新文件。但是,您仍然需要检查该文件是否存在,因为如果存在,它将已经具有强制性 RTF header。所以检查这个值并将其存储在布尔值中。
RTF 文件以 {\rtf
开头并且必须始终以 }
结尾,因此如果您想添加某些内容 "at the end",则必须删除最后一个字符。最简单的方法是将文件指针移动到末尾减1,然后使用truncate
。然后你可以添加任何有效的 RTF 序列(文件 header 除外,如果有的话),最后总是在末尾添加 }
。
在代码中:
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
代码,因此您可以使用 \f1
将字体设置为格鲁吉亚。\fonttbl
只需出现一次。)