在观看有关数据类的ArjanCodes视频后,
我一直在尝试将变量从 json 配置文件添加到 python 数据类,以格式化 Jupyterlab 中打印函数 printT 的字体样式。
我将 ANSI 转义用于格式化,如果我将变量导入数据类,这种转义将不再起作用。不是格式化文本,而是打印出 ANSI 代码。
# config.json
{
"lb" : "\n",
"solid_line" : "'___'*20 + config.lb",
"dotted_line" : "'---'*20 + config.lb",
"BOLD" : "\\033[1m",
"END" : "\\033[0m"
}
# config.py
from dataclasses import dataclass
import json
@dataclass
class PrintConfig:
lb : str
solid_line : str
dotted_line : str
BOLD : str
END : str
def read_config(config_file : str) -> PrintConfig:
with open(config_file, 'r') as file:
data = json.load(file)
return(PrintConfig(**data))
# helper.py
from config import read_config
config = read_config('config.json')
def printT(title,linebreak= True,addLine = True, lineType = config.solid_line,toDisplay = None):
'''
Prints a line break, the input text and a solid line.
Inputs:
title = as string
linebreak = True(default) or False; Adds a line break before printing the title
addLine = True(default) or False; Adds a line after printing the title
lineType = solid_line(default) or dotted_line; Defines line type
toDisplay = displays input, doesnt work with df.info(),because info executes during input
'''
if linebreak:
print(config.lb)
print(config.BOLD + title + config.END)
if addLine:
print(lineType)
if toDisplay is not None:
display(toDisplay)
# test.ipynb
from helper import printT
printT('Hello World')
输出
\033[1mHello World\033[0m
'___'*20 + config.lb
期望的结果
你好世界
如果我使用 eval 它会起作用,if addLine: print(eval(lineType))
但我想更深入地了解这里的机制。有没有办法让它在没有评估的情况下工作?
这部分"solid_line" : "'___'*20 + config.lb"
也感觉不对。