用 Python 把文字变成ASCII艺术字:开发者的专属极客浪漫

摘要:使用 Python pyfiglet 库,用 renderText() 一行将文本渲染为 ASCII 艺术字,封装成类管理字体、异常回退与字体列举,并给出多字体遍历示例。

引言:藏在代码里的极客浪漫

你有没有过这样的瞬间:打开终端启动 CLI 时,满屏字符拼出的 WELCOME 突然撞进眼里;点开某个开源项目的源码文件,开头用字符堆叠出的 OpenApi 标识又猝不及防地跳出来。那些看似普通的字母与符号,在开发者手里变成了藏在代码里的专属彩蛋,成了技术世界里一种心照不宣的极客浪漫。

你是否也动过念头,想亲手用一个个字符拼出属于自己的那一份浪漫?可真正上手才发现——字符排得歪歪扭扭、比例怎么调都不对劲,折腾半天总差点意思。

其实根本不用自己一个个敲字符硬拼。Python 的 pyfiglet 库,只需一行 renderText(),就能把任意文本直接渲染成规整又好看的 ASCII 艺术字。你想要的极客浪漫,敲一行代码就能实现。

一、什么是 ASCII 艺术字

ASCII 艺术字是指用可见 ASCII 字符(字母、数字、符号)# / | \ _ . 等排布而成的图形文字,通常在终端、README、CI 日志中作为标题横幅使用,效果比纯文本酷很多。

例如用 slant 字体渲染 success

   _____   __  __   _____   _____   ___     _____   _____
  / ___/  / / / /  / ___/  / ___/  / _ \   / ___/  / ___/
 (__  )  / /_/ /  / /__   / /__   /  __/  (__  )  (__  ) 
/____/   \__,_/   \___/   \___/   \___/  /____/  /____/  

pyfiglet 是经典工具 figlet 的 Python 移植版,开箱即用、零外部依赖(纯标准库之外仅需 pyfiglet 一个包)。

二、安装与环境

pip install pyfiglet

验证安装:

import pyfiglet
print(pyfiglet.__version__)

三、最简用法

Figlet 是核心类,传入 font 构造实例,调用 renderText(text) 即可得到艺术字字符串:

from pyfiglet import Figlet

art = Figlet(font="slant").renderText("Pytest")
print(art)

renderText 返回的是一个普通字符串,包含换行符。你可以打印、写入文件,或嵌入其他输出。

常用字体先记这几个(完整列表见下文 list_fonts):

字体 风格
standard 经典标准
slant 斜体,有科技感
block 方块风格
banner3-D 3D 横幅
doom 粗犷厚重
starwars 星球大战主题

四、封装为工具类

demo 给出一个完整封装,把字体管理、异常回退、字体列举统一管理:

from pyfiglet import Figlet


class AsciiArtGenerator:
    """ASCII 艺术字生成器"""

    RECOMMENDED_FONTS = [
        "standard",
        "slant",
        "block",
        "banner3-D",
        "doom",
        "epic",
        "larry3d",
        "isometric1",
        "starwars",
        "big",
    ]

    def __init__(self, font="slant"):
        self.font = font
        self.set_font(font)

    def set_font(self,font):
        """设置字体"""
        if font not in Figlet().getFonts():
            print(f"[!] 字体 '{font}' 未找到,回退到 standard")
            font = "standard"
        self.figlet = Figlet(font=font)

    def generate(self, text: str) -> str:
        """生成 ASCII 艺术字"""
        return self.figlet.renderText(text)

    def print_art(self, text: str):
        """直接打印 ASCII 艺术字"""
        art = self.generate(text)
        print(art)

    @staticmethod
    def list_fonts():
        """列出所有可用字体"""
        fonts = Figlet().getFonts()
        print(f"共 {len(fonts)} 种可用字体:\n")
        for i, f in enumerate(fonts, 1):
            print(f"{i:>4}. {f}")
        return fonts

4.1 设计要点

  1. Figlet 实例创建并复用:渲染文本时不再重建对象,避免无谓开销
  2. set_font() 抽取统一的字体设置入口:字体校验、回退、Figlet 重建三件事放在同一处,构造函数与后续切换字体共用,避免逻辑重复或遗漏
  3. 字体校验前置pyfigletFiglet(font=font) 构造时即校验字体名,字体不存在会直接抛 FontNotFound——因此校验必须在 Figlet(...) 之前用 if font not in Figlet().getFonts() 完成
  4. generate()print_art() 分离:前者返回字符串(便于复用/写文件),后者直接打印(便于调试)
  5. list_fonts() 为静态方法:不依赖实例状态,返回 fonts 列表,也方便程序化使用(如随机选字体、配合 set_font() 校验)

五、遍历多种字体示例

demo 的程序入口对 Python / Jenkins / Tools / Pytest 四个词逐个字体渲染:

if __name__ == "__main__":

    generator = AsciiArtGenerator(font="slant")

    for key in ['Python', 'Jenkins', "Tools", "Pytest"]:
        key = ' '.join([i for i in key])  # 字母之间加空格,避免连笔不好看
        for font in generator.RECOMMENDED_FONTS:
            generator.set_font(font)  # 切换字体
            generator.print_art(key)

注意 key = ' '.join([i for i in key]):把 Python 拆成 P y t h o n。原因是部分字体字形较密,字母连在一起视觉上会糊成一片,显式加空格能显著提升清晰度与排版感。

RECOMMENDED_FONTS 是类级列表,标出 10 种经过筛选的好用字体,作为遍历顺序和默认推荐集。

六、常见运用场景

  • 终端启动横幅:程序 / CLI 启动时打印一句艺术字,例如 APP READY
  • CI/CD 日志:Jenkins、GitHub Actions 跑完打印 SUCCESS / BUILD OK,日志可读性和仪式感并存
  • README 头图:README 顶部放一行 ASCII 艺术字作为标题,仓库观感明显提升
  • 代码注释 / 模块 banner:文件顶部用 ASCII 字写模块名

在这里插入图片描述

七、完整可运行文件

将 demo.py 保存后运行:

python demo.py

输出会依次展示 PythonJenkinsToolsPytest 各自在不同种字体下的艺术字。

八、小结

能力 调用方式
一句话出图 Figlet(font="slant").renderText("Pytest")
封装复用 AsciiArtGenerator(font=...).generate(text)
异常回退 构造函数内 if font not in Figlet().getFonts() 回退 standard
列出字体 AsciiArtGenerator.list_fonts()
多字体遍历 遍历 RECOMMENDED_FONTS

pyfiglet 让 ASCII 艺术字降到一行代码的成本,配合类封装可在任何需要仪式感的地方直接嵌入。


Python #pyfiglet #ASCII #Art #命令行 #工具类

posted @ 2026-09-21 09:15  EXIORAN  阅读(88)  评论(0)    收藏  举报