Python 输出中的字体格式设置

1 投票
1 回答
19741 浏览
提问于 2025-04-17 17:17

我想在Python中改变输出的字体。我听说可以用Tkinter这个包,但对我来说太复杂了。

我正在处理两个文档,一个是普通文本,另一个是斜体文本。我希望输出的内容能交替显示,每行一个文档,普通文本和斜体文本交替出现。

现在程序的输出是第一行是普通文本,第二行是斜体,之后的所有行都是斜体。

我想知道有没有办法在控制台输出中改变或重置字体格式。

谢谢,

这是我的程序。基本上我不知道该怎么做才能让输出有不同的格式:一个是普通文本,另一个是斜体。我是在Windows下用Python 3运行的。

L1 = open ('vera.txt','r',-1,'utf-8')
L2 = open ('vera_en2.txt','r',-1,'utf-8')
O = open ('output.txt','w',-1,'utf-8')
for line in L1:
    line2 = L2.readline()
    print(line, end='')
    print(line2)
    O.write(line)
    O.write(line2)
    O.write("\n")
L1.close()
L2.close()
O.close()

1 个回答

1

看起来你的 vera_en2.txt 文件里可能有一个 ANSI 转义码,它把字体设置成了斜体。你可以打开这个文件,或者打印出文件第一行的内容来确认一下。

显然,你现在是在一个支持 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 是《贝奥武夫》的古英语和现代版本时的结果。

撰写回答