px普贤教程PuXian
普贤教程 › 生态包

文本与中文

18 个文本与中文处理包:终端着色、进度条、表格、中文拼音/分词/简繁、数字转中文、自然排序、字符串距离。写 CLI 工具与后台报表时几乎天天用到。

表格:必须用 v2

px
import table

var rows = [["中文", "abc"], ["第二行", "defgh"]]
print(tb_render_v2(["列一", "列二"], rows, {"border": "utf8"}))
text
+--------+-------+
| 列一   | 列二  |
+--------+-------+
| 中文   | abc   |
| 第二行 | defgh |
+--------+-------+
tb_render 和 tb_render_v2 的区别是中文宽度v1 按 len() 算列宽(一个汉字算 1),中文行会错位;v2 按显示宽度算(汉字算 2)。只写 v2,v1 保留只是为了不破坏旧代码。

中文三件套

px
import pinyin
print(py_convert("中国"))          # zhong guo     ← 字级,空格分隔,不做分词
print(py_lookup("中").ok())        # zhong
print(py_convert_list("你好").ok())# [{ch: 你, py: ni}, {ch: 好, py: hao}]

import cnnum
print(cnnum_format(12345).ok())    # 一万二千三百四十五
print(cnnum_parse("一万二千三百四十五").ok())   # 12345
print(cnnum_amount_str("1234.56").ok())        # 壹仟贰佰叁拾肆元伍角陆分

import seg
print(sg_count("中华人民共和国"))   # 词数
print(sg_tokenize("中华人民共和国"))
超范围返回 Err,.ok() 得 nullcnnum_format 只支持 0–99,999,999;传 123456789 返回 Err(cnnum: 超出 0-99999999 范围),而 .ok() 给你 null——页面上就显示空。金额走 cnnum_amount_str(支持到万亿)。

人类可读格式化

px
import human
print(hm_filesize(1536))       # 1.5KB
print(hm_filesize(1048576))    # 1MB
print(hm_number(1234567))      # 1.2M

import num2words
print(nw_convert(123))         # one hundred twenty-three

import thousep
print(th_thousands(1234567))   # 1,234,567
print(th_ordinal(21))          # 21st
print(th_bytes(1536))          # 1.5 KB

区分用途:human 给终端看(1.5KB 无空格),thousep 给报表看(1,234,567 千分位 + 序数 + 紧凑写法)。

命令行

px
import cli

var spec = {
    "name": "deploy",
    "flags": [
        {"long": "env", "short": "e", "type": "str", "default": "prod"},
        {"long": "dry-run", "short": "n", "type": "bool"},
        {"long": "port", "short": "p", "type": "int"}
    ]
}
var r = cli_parse(spec, argv)      # argv 由你传入
print(r)

支持长短选项、= 与空格两种赋值、布尔开关、类型转换(str/int/float/bool)与错误文案。--help 的生成也走它。

CLI 的 argv 从哪来用 argv(内建,不含程序名)或 args(),别去读 env("ARGS")。

终端输出

px
import ansi
print(an_style("危险", "bold") + an_reset())
print(an_fg("红字", 31) + an_reset())
print(an_strip(s))            # 去掉 ANSI 转义,写日志/文件前必须先 strip

import progress
print(pg_bar(37, 100))           # 进度条渲染
写文件前一定 an_strip颜色是给终端看的;把带转义符的字符串写进日志文件或 HTML,会看到一堆 \x1b[31m。

其余文本工具

包干什么
strcasesnake / camel / kebab 互转
slug标题 → URL slug(可配中文拼音)
hant简繁转换(常用字子集)
natsort自然排序:file2 在 file10 前
textwrap按宽度折行(中文按显示宽度)
edist编辑距离 / 相似度(拼写纠错、模糊匹配)
readstat可读性测度(句长、词长、难度分)
inflect英文复数化(box → boxes)
faker假数据:姓名、手机、邮箱、地址(测试夹具用)
richmdMarkdown → ANSI 富文本(终端里渲染 MD)

生成假数据

px
import faker
print(fa_name())
print(fa_phone())
print(fa_email())

写测试时先把假数据钉死(固定种子或直接写死数组),否则「今天过、明天挂」的测试会浪费很多时间。