您 的字体中似乎有一个ANSI 转义码vera_en2.txt
将字体设置为斜体。打开文件或打印该文件repr()
的第一行以验证这一点。
显然您已经在与 ANSI 兼容的终端中工作,否则您不会看到斜体文本。因此,您应该能够使用 重置字体print("\033[0m")
,并使用 再次启用斜体print("\033[3m")
。
如果这一切看起来太深奥,我建议使用colorama。
编辑:
啊,所以你想写一个带有一些斜体文本的 RTF 文件。而且您的 .txt 文件实际上并不是 .txt 文件。这和我上面解释的完全不同。
通过分析实际 rtf 的纯文本,我想出了这个小例子。它生成一个带有普通、斜体和粗体字的小 rtf 文件;\i 和 \b 用于切换这些格式。
# open file
myrtf = open('myrtf.rtf', 'w ')
# write some necessary header info
myrtf.write(r'{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}')
# write the actual text - notice I'm using raw strings (r'')
myrtf.write(r'normal \i italic \i0 \b bold \b0 normal\n')
# write end of file stuff
myrtf.write(r'}\n\x00')
# close file
myrtf.close()
另外,回答另一个问题;在控制台中使用斜体可能很困难,大多数终端都不支持它。
要使上述代码示例适应您的问题:
L1 = open ('file1.txt','r')
L2 = open ('file2.txt','r')
O = open ('output.rtf','w')
# write header
O.write(r'{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}')
for line in L1:
line2 = r"\i " + L2.readline() + r" \i0\line\par" # make text from L2 italic
print(line, end='')
print(line2)
O.write(line)
O.write(line2)
# close rtf
O.write(r'}\n\x00')
L1.close()
L2.close()
O.close()
另一个补充:
根据我们在评论中的讨论,这是通过编写 html 文件而不是 rtf 来实现的一种方法:
L1 = open ('file1.txt','r')
L2 = open ('file2.txt','r')
O = open ('output.html','w')
# write header
O.write(r'<html><head><title>Foobar</title></head><body><table>')
for line in L1:
line2 = r"<i>" + L2.readline() + r"</i></br>" # make text from L2 italic
O.write("<tr>")
O.write("<td>%s</td>" % line)
O.write("<td>%s</td>" % line2)
O.write("</tr>\n")
# footer
O.write(r'</table></body></html>')
L1.close()
L2.close()
O.close()
在这里,您可以看到当 file1.txt 和 file2.txt 是 Beowulf 诗句的古英语和现代版本时的结果。