标准库
28 个模块、299 个函数,外加
30 个内建。函数名和参数说明都是中文 ——
所以查文档这件事,在基石里通常不需要。
怎么用
先导入模块,再用 `模块名.函数名(...)` 调用导入 数学
打印(数学.开方(16))
打印(数学.最大公约数(12, 18))
内建不用导入。打印、长度、范围、
整数 这些随时可用;只有标准库模块才要 导入。
不知道有哪些名字时:jishi --ai-card 打出全量清单。
模块(28 个)
HTTP服务端4 个函数
| 调用 | 说明 |
|---|
| 解析请求(请求文本) | 把一段**原始 HTTP 请求**文本解析成字典。纯函数,不碰 socket。 |
| 构造响应(状态=200, 正文='', 内容类型='text/plain; charset=utf-8', 头=空) | 把「状态 + 正文 + 头」拼成一段**完整的 HTTP 响应**文本。纯函数。 |
| 空闲端口() | 问系统要一个**当前空闲的端口**,返回它的号。 |
| 启动(端口=8000, 处理函数=空, 最多请求数=0) | 起一个 HTTP 服务,**阻塞**着收请求,每个请求调一次 `处理函数`。 |
html11 个函数
| 调用 | 说明 |
|---|
| 取文本(片段) | 从一段 HTML 里取出**纯文本**:去标签、解实体、把连续空白压成一个空格。 |
| 取链接(页面) | 把页面里所有 `<a href="…">文字</a>` 取成 `[[文字, 地址], …]`。 |
| 取表格(页面) | 把页面里**第一张** `<table>` 取成「行列表的列表」:每行是各单元格文本。 |
| 转义(值) | 把文本里的 HTML 特殊字符换成实体(`&` `<` `>` `"` `'` 五个都换)。 |
| 原样(值) | 标记这段内容是**已经生成好的 HTML**,放进标签里时不再转义。 |
| 标签(名, 内容='', 属性=空) | 生成一个标签:`标签("p", "你好", {"类名": "提示"})` → `<p class="提示">你好</p>`。 |
| 空元素(名, 属性=空) | 生成自闭合标签:`空元素("img", {"src": "a.png"})` → `<img src="a.png" />`。 |
| 链接(文字, 地址, 属性=空) | 生成 `<a href="…">文字</a>`。地址与文字都会被转义。 |
| 属性文本(值) | 把文本转义成可以安全放进**属性值**的形式(引号也转)。 |
| 有序列表(项目, 属性=空) | 生成 `<ol><li>…</li>…</ol>`;每项内容都会被转义。 |
| 无序列表(项目, 属性=空) | 生成 `<ul><li>…</li>…</ul>`;每项内容都会被转义。 |
json5 个函数
| 调用 | 说明 |
|---|
| 转文本(对象, 缩进=空) | 把列表/字典等转成 JSON 文本(中文不转义成 \uXXXX)。 |
| 解析(文本) | 把 JSON 文本解析成列表/字典等。 |
| 有效(文本) | 这段文本是不是**合法的 JSON**(返回真/假,不抛错)。 |
| 读文件(路径) | 从文件读入并解析 JSON。 |
| 写文件(路径, 对象, 缩进=空) | 把对象转成 JSON 并写入文件(中文不转义)。 |
加密10 个函数
| 调用 | 说明 |
|---|
| 摘要(文本, 算法='sha256') | 返回文本的摘要(十六进制小写)。算法可为 md5/sha1/sha256/sha512。 |
| md5(文本) | 返回文本的 MD5 摘要。 |
| sha1(文本) | 返回文本的 SHA-1 摘要。 |
| sha256(文本) | 返回文本的 SHA-256 摘要。 |
| sha512(文本) | 返回文本的 SHA-512 摘要。 |
| 文件摘要(文件路径, 算法='sha256') | 返回文件的摘要(分块读取,不一次性载入内存)。 |
| 支持的算法() | 返回可用的摘要算法名列表。 |
| HMAC(键, 文本, 算法='sha256') | 用**密钥**给文本做 HMAC 签名(十六进制小写)。 |
| 口令摘要(口令, 盐, 迭代=100000, 算法='sha256') | 把**口令**揉进摘要(PBKDF2),十六进制小写。存口令只该存它。 |
| 安全随机字节(长度) | 生成一串**不可预测**的随机字节,返回**字节**。 |
压缩6 个函数
| 调用 | 说明 |
|---|
| 打包(zip路径) | 把若干文件或目录打包进一个 zip。返回 zip 路径。 |
| 解压(zip路径, 目标目录='') | 把 zip 解压到目标目录(默认当前目录),返回目标目录。 |
| 列出内容(zip路径) | 返回 zip 里的条目名列表(含目录,按原始顺序)。 |
| 压缩文件(gz路径, 内容) | 把**一份内容**压成 `.gz` 单文件,返回这个 gz 的路径。 |
| 解压文件(gz路径) | 把 `.gz` 单文件解开,返回里面的文本(按 UTF-8 解码)。 |
| 解压成员(zip路径, 成员名) | 只取出 zip 里的**一个成员**,返回它的字节(不用把整包解开)。 |
参数5 个函数
| 调用 | 说明 |
|---|
| 新建(名字, 说明='') | 新建一个参数解析器,返回它的**句柄**(后面所有调用都带着它)。 |
| 选项(句柄, 名, 默认=空, 说明='') | 给解析器声明一个取值选项:`--名 值`(也接受 `--名=值`)。 |
| 标志(句柄, 名, 说明='') | 给解析器声明一个开关:写 `--名` 就是真,不写就是假。 |
| 用法(句柄) | 生成用法说明(自动包含已声明的选项)。 |
| 解析(句柄, 参数们=空) | 解析参数列表,返回上面文档里说的那个字典。 |
容器9 个函数
| 调用 | 说明 |
|---|
| 计数(可迭代) | 数每个元素出现了几次,返回「元素 → 次数」的字典。 |
| 最多(可迭代, 个数=1) | 出现次数最多的前 `个数` 个,返回 [[元素, 次数], …](降序)。 |
| 按值排序(频次字典, 降序=真) | 把「元素 → 次数」这类字典按**值**排成 [[元素, 值], …]。 |
| 分组(可迭代, 键函数) | 按「键函数(元素)」的返回值把元素分组,返回「键 → [元素, …]」。 |
| 取前(可迭代, 个数) | 取前 `个数` 个元素(不足就给全部)。 |
| 取后(可迭代, 个数) | 取后 `个数` 个元素(不足就给全部)。 |
| 分块(可迭代, 每块个数) | 把序列切成若干等长小块(最后一块可能短)。 |
| 索引表(可迭代) | 把序列做成「值 → **首次**出现的下标」字典,让「查一次」从 O(n) 变 O(1)。 |
| 深拷贝(值) | 把列表 / 字典**递归复制**一份;改副本不影响原件。 |
对比5 个函数
| 调用 | 说明 |
|---|
| 逐行(旧, 新, 带行号=假) | 返回逐行的差异说明列表,每项形如 `["+", 行号, 内容]` 或 `[" ", 行号, 内容]`。 |
| 统一(旧, 新, 上下文=3) | 返回**统一格式**的差异文本(`--- 旧` / `+++ 新` / `@@` 分块 / `+`-` 行)。 |
| 并排(旧, 新, 宽=30) | 返回**左右并排**的差异文本,适合打给人看(`|` 分隔两栏)。 |
| 相似度(甲, 乙) | 返回两段文本的相似度(0 到 1;1 表示完全一样)。 |
| 最相似(目标, 候选) | 从候选列表里挑出与目标**最相似**的那一项(并列时取最靠前的)。 |
并发3 个函数
| 调用 | 说明 |
|---|
| 批量摘要(路径们, 算法='sha256', 线程数=4) | **同时**算一批文件的摘要,返回的列表**与输入一一对应**(同一顺序)。 |
| 批量读(路径们, 线程数=4) | **同时**读一批文件的内容,每一项是 `字节`(顺序与输入一致)。 |
| 并行取(网址们, 线程数=4) | **同时**取一批网址的正文(GET),顺序与输入一致。 |
数学18 个函数
| 调用 | 说明 |
|---|
| 开方(x) | 返回 x 的平方根。 |
| 平方(x) | 返回 x 的平方(x * x)。 |
| 幂(底数, 指数) | 返回 底数 的 指数 次方(整数次方结果保持整数)。 |
| 绝对值(x) | 返回 x 的绝对值。 |
| 向上取整(x) | 返回大于等于 x 的最小整数。 |
| 向下取整(x) | 返回小于等于 x 的最大整数。 |
| 四舍五入(x, 位数=0) | 把 x 四舍五入到指定小数位数。 |
| 正弦(角度_弧度) | 返回弧度角的正弦值。 |
| 余弦(角度_弧度) | 返回弧度角的余弦值。 |
| 正切(角度_弧度) | 返回弧度角的正切值。 |
| 角度转弧度(角度) | 把角度(0-360)换算成弧度。 |
| 对数(x, 底=…) | 返回以「底」为底的对数,默认自然对数。 |
| 常用对数(x) | 返回以 10 为底的对数。 |
| 最大公约数(a, b) | 返回两个整数的最大公约数。 |
| 最小公倍数(a, b) | 返回两个整数的最小公倍数。 |
| 阶乘(n) | 返回 n 的阶乘(1×2×…×n)。 |
| 限制(值, 底, 顶) | 把 值 卡在 [底, 顶] 区间内(小了给底,大了给顶)。 |
| 符号(值) | 返回 -1、0 或 1(值分别是负数、零、正数)。 |
数据库15 个函数
| 调用 | 说明 |
|---|
| 打开(路径) | 打开(没有就新建)一个 SQLite 库,返回**库句柄**。 |
| 关闭(库) | 关掉这个库(幂等:没打开过、或已经关过了,都不报错)。 |
| 表们(库) | 列出这个库里所有表的名字(按名字排)。 |
| 有表(库, 表名) | 表在不在。 |
| 建表(库, 表名, 字段们) | 建一张表(已经有了就不动它)。 |
| 建索引(库, 表名, 字段们, 唯一=假) | 给字段建索引(已经有了就不动)—— 数据一多,按这些字段查就从「全表扫」 |
| 插入(库, 表名, 记录) | 插一条记录(`记录` 是字典:字段 → 值),返回新行的 `id`。 |
| 批量插入(库, 表名, 记录们) | 一次插很多条(**同一个事务**),返回插了几条。 |
| 修改(库, 表名, 条件, 新值) | 把**满足条件**的行改成新值(`新值` 是字典:字段 → 新值), |
| 删除(库, 表名, 条件) | 删掉**满足条件**的行,返回删了几行。 |
| 查询(库, 表名, 条件=空, 排序=空, 倒序=假, 条数=0) | 查出**记录列表**(每条是一个字典)。 |
| 条数(库, 表名, 条件=空) | 数一数有多少行(给了条件就只数满足的)。 |
| 汇总(库, 表名, 按, 求和, 条件=空) | 按「按」字段分组,对「求和」字段做统计,返回 `{组: 汇总字典}`。 |
| 执行(库, SQL) | 直接跑**一句写操作的 SQL**(INSERT / UPDATE / DELETE / CREATE …), |
| 执行查询(库, SQL) | 直接跑一句 SELECT,返回**记录列表**。 |
文件21 个函数
| 调用 | 说明 |
|---|
| 写文本(路径, 内容) | 把内容写进文件(覆盖原有内容)。 |
| 读文本(路径) | 读取整个文本文件的内容。 |
| 读字节(路径) | 把整个文件读成**字节**(不做任何编码转换)。 |
| 写字节(路径, 字节) | 把字节写进文件(覆盖原有内容)。 |
| 追加文本(路径, 内容) | 把内容追加到文件末尾(文件不存在则创建)。 |
| 写行(路径, 行列表) | 把列表里的每一行写进文件(自动加换行,覆盖原内容)。 |
| 按行读(路径) | 按行读取文件,返回每行内容的列表(不含换行符)。 |
| 文件存在(路径) | 判断文件或目录是否存在。 |
| 是文件(路径) | 判断路径是不是一个文件。 |
| 是目录(路径) | 判断路径是不是一个目录。 |
| 列出目录(路径='.') | 列出目录里的所有文件和子目录名字,返回列表。 |
| 创建目录(路径) | 创建目录(自动创建中间层级,已存在则不报错)。 |
| 删除文件(路径) | 删除文件。 |
| 复制(源路径, 目标路径) | 复制文件。 |
| 文件大小(路径) | 返回文件的字节数。 |
| 原子写(路径, 内容) | **原子写入**:先写同目录下的临时文件,再改名覆盖目标。 |
| 路径拼接() | 把几段路径拼在一起,用 / 分隔。 |
| 文件名(路径) | 取出路径里的文件名部分。 |
| 扩展名(路径) | 取出文件的扩展名(带点),例如 a.jsh → .jsh。 |
| 追加字节(路径, 内容) | 把字节**追加到文件末尾**(文件不存在就新建),返回写进了多少字节。 |
| 复制目录(源目录, 目标目录) | 把**整棵目录树**复制到目标位置(源目录下的层级原样保留),返回目标路径。 |
文本21 个函数
| 调用 | 说明 |
|---|
| 拼接(序列, 分隔符='') | 把列表里的文本用分隔符连成一段。 |
| 显示宽度(值) | 这段文本在**等宽终端**里占几列 —— 一个汉字算 2,组合符算 0。 |
| 居中(文本, 宽度, 填充=' ') | 文本居中,两侧补到指定**显示宽度**(一个汉字算 2 列,见 `显示宽度`)。 |
| 左对齐(文本, 宽度, 填充=' ') | 文本靠左,右侧补到指定**显示宽度**(适合做表格对齐)。 |
| 右对齐(文本, 宽度, 填充=' ') | 文本靠右,左侧补到指定**显示宽度**(适合数字对齐)。 |
| 补零(文本, 宽度) | 在左侧补 0 到指定宽度,比如 补零(7, 3) → "007"。 |
| 重复(文本, 次数) | 把文本重复若干次。 |
| 计数(文本, 子串) | 子串在文本中出现的次数。 |
| 是数字(文本) | 是否全是数字字符。 |
| 是字母(文本) | 是否全是字母(中文也算字母)。 |
| 是空白(文本) | 是否全是空白字符。 |
| 是大写(文本) | 字母是否全是大写。 |
| 是小写(文本) | 字母是否全是小写。 |
| 首字母大写(文本) | 首字母大写,其余小写。 |
| 去前缀(文本, 前缀) | 如果文本以前缀开头就去掉它,否则原样返回。 |
| 去后缀(文本, 后缀) | 如果文本以后缀结尾就去掉它,否则原样返回。 |
| 格式化(模板) | 把 {} 占位符依次替换成参数:格式化("{}今年{}岁", "小明", 12)。 |
| 切成三段(文本, 分隔符) | 按第一个分隔符切成三段:[前, 分隔符, 后]。 |
| 按行拆分(文本) | 按换行拆成行的列表。 |
| 截断(文本, 宽度, 省略号='…') | 超长就截断并加省略号,否则原样返回(`宽度` 含省略号本身)。 |
| 填充(文本, 宽度, 填充字符=' ') | 把文本**居中**填充到指定**显示宽度**(两侧补同样的字符)。 |
日志8 个函数
| 调用 | 说明 |
|---|
| 级别们() | 列出所有可用的级别名(从松到严)。 |
| 设级别(级别) | 设置输出级别:低于它的调用会被静默丢掉。 |
| 取级别() | 返回当前级别名。 |
| 设前缀(前缀) | 给每条日志加一个固定前缀(比如模块名)。给空串就取消。 |
| 调试() | 调试级输出(默认不显示,要先 `设级别("调试")`)。 |
| 信息() | 信息级输出(默认显示)。 |
| 警告() | 警告级输出(写到标准错误)。 |
| 错误() | 错误级输出(写到标准错误)。**不会**中止程序,只是记一笔。 |
日期17 个函数
| 调用 | 说明 |
|---|
| 今天() | 返回今天的日期,例如 2026-09-01。 |
| 解析(日期文本) | 把「年-月-日」文本解析成内部日期(供本模块函数使用)。 |
| 格式化(日期文本, 格式='%Y-%m-%d') | 把日期按指定格式输出,例如 格式化("2026-09-01", "%Y年%m月%d日")。 |
| 加天数(天数, 日期文本) | 返回日期加上 N 天后的日期。 |
| 减天数(天数, 日期文本) | 返回日期减去 N 天后的日期。 |
| 加月(月数, 日期文本) | 返回日期加上 N 个月后的日期。 |
| 加年(年数, 日期文本) | 返回日期加上 N 年后的日期(`2月29日` 落在平年时会「收」到 `2月28日`)。 |
| 解析ISO(文本) | 把 ISO 8601 文本解析成日期(`年-月-日`)。 |
| 相差天数(日期文本1, 日期文本2) | 返回两个日期相差的天数(日期1 减 日期2,可为负)。 |
| 早于(日期文本1, 日期文本2) | 日期1 是否早于日期2。 |
| 晚于(日期文本1, 日期文本2) | 日期1 是否晚于日期2。 |
| 相等(日期文本1, 日期文本2) | 两个日期是否相同。 |
| 星期名(日期文本) | 返回日期是星期几:一/二/三/四/五/六/日。 |
| 今年() | 返回当前年份。 |
| 本月() | 返回当前月份(1-12)。 |
| 本年天数() | 返回当前年份一共有多少天(闰年 366,平年 365)。 |
| 月天数(年, 月) | 返回 **某年某月有几天**(闰年的 2 月自动是 29)。 |
时间11 个函数
| 调用 | 说明 |
|---|
| 现在() | 返回当前的日期和时间,例如 2026-09-01 13:40:00。 |
| 今天() | 返回今天的日期,例如 2026-09-01。 |
| 此刻() | 返回当前时间的字典:年/月/日/时/分/秒/星期。 |
| 时间戳() | 返回当前的时间戳(从 1970 年开始的秒数)。 |
| 格式化时间戳(时间戳) | 把时间戳转成「年-月-日 时:分:秒」文本。 |
| 睡眠(秒) | 暂停指定的秒数。 |
| 高精度时间() | 返回高精度计时值(用于测量代码耗时)。 |
| 星期名(日期文本) | 返回日期是星期几:一/二/三/四/五/六/日。 |
| 加天数(天数, 日期文本) | 返回日期加上 N 天后的日期文本。 |
| 计时(名字='') | 计时器:`用 时间.计时("建索引") 为 t:`。 |
| 时区偏移() | 返回本机相对 UTC 的**时区偏移**,形如 `+08:00` / `-05:00`。 |
标识3 个函数
| 调用 | 说明 |
|---|
| 唯一标识(去掉横线=假) | 返回一个全球唯一标识(UUID 第 4 版,随机生成)。 |
| 唯一标识短() | 返回一个**较短**的唯一标识(22 个字符,URL 安全)。 |
| 唯一标识字节() | 返回 16 个字节(0-255 的整数列表)形式的唯一标识。 |
正则6 个函数
| 调用 | 说明 |
|---|
| 匹配(模式, 文本) | 从头匹配:文本开头是否符合模式,返回布尔。 |
| 搜索(模式, 文本) | 在文本中搜索第一个符合模式的内容,返回匹配文本(找不到返回空文本)。 |
| 查找全部(模式, 文本) | 找出文本中所有符合模式的内容,返回匹配文本列表。 |
| 替换(模式, 替换为, 文本) | 把文本中所有符合模式的部分替换成新内容。 |
| 拆分(模式, 文本) | 按模式把文本拆分成列表。 |
| 分组(模式, 文本) | 搜索并返回所有分组(含第 0 组完整匹配)。找不到返回空列表。 |
测试11 个函数
| 调用 | 说明 |
|---|
| 重置() | 清空已记录的用例(写多批测试时用)。 |
| 用例(名字, 函数=空) | 跑一个用例:`测试.用例("名字", 函数():…)`。 |
| 相等(实际, 期望, 说明='') | 断言 实际 == 期望(失败时把两边都打出来)。 |
| 不等(实际, 不该等于, 说明='') | 断言 实际 != 不该等于。 |
| 为真(条件, 说明='') | 断言条件为真。 |
| 为假(条件, 说明='') | 断言条件为假。 |
| 近似(实际, 期望, 误差=1e-09, 说明='') | 断言 实际 与 期望 的差不超过 误差(浮点数比较用它)。 |
| 包含(容器, 元素, 说明='') | 断言容器里有这个元素。 |
| 抛出(函数, 说明='') | 断言这段代码会报错,返回那个异常(可以再看它的类型)。 |
| 统计() | 返回汇总数据:`{"用例", "通过", "失败", "出错"}`。 |
| 汇总() | 打印汇总;**有任何失败就报错**(CLI 于是以退出码 1 结束)。 |
系统14 个函数
| 调用 | 说明 |
|---|
| 系统名() | 返回操作系统名:Windows / Linux / Darwin。 |
| 系统版本() | 返回操作系统版本描述。 |
| 机器架构() | 返回机器架构,如 AMD64。 |
| 处理器() | 返回处理器描述。 |
| 当前目录() | 返回当前工作目录。 |
| 改目录(路径) | 切换当前工作目录,返回切换后的目录。 |
| 环境变量(名字, 默认='') | 读取环境变量;不存在时返回默认值。 |
| 设环境变量(名字, 值) | 设置一个环境变量。 |
| 执行(命令, 超时=10.0) | 执行一条外部命令,返回标准输出(合并 stdout+stderr)。 |
| 退出码(命令, 超时=10.0) | 执行命令并只返回退出码(0 表示成功)。 |
| 打开(路径) | 用系统的**默认程序**打开一个文件(或网址),成功返回真、失败返回假。 |
| 主机名() | 返回当前机器的主机名。 |
| 参数() | 返回脚本收到的命令行参数(不含脚本名本身)。 |
| CPU核数() | 返回这台机器**能并行干活的 CPU 核数**(决定「开几路并行」时用)。 |
统计10 个函数
| 调用 | 说明 |
|---|
| 求和(数据) | 返回所有数字的和(空列表返回 0)。 |
| 平均(数据) | 返回算术平均数。 |
| 中位数(数据) | 返回中位数(偶数个时取中间两个的平均)。 |
| 众数(数据) | 返回出现次数最多的值。 |
| 方差(数据, 样本=假) | 返回方差(默认**总体方差**;`样本=真` 时用样本方差,除以 n-1)。 |
| 标准差(数据, 样本=假) | 返回标准差(方差的开方)。`样本=真` 时用样本标准差。 |
| 极差(数据) | 返回最大值与最小值的差。 |
| 分位数(数据, p) | 返回第 p 分位数(p 取 0–1;0.5 就是中位数,0.25 是下四分位)。 |
| 去极值平均(数据, 去掉个数=1) | 去掉最大和最小的各「去掉个数」个之后求平均(比赛评分常用)。 |
| 加权平均(数据, 权重) | 返回加权平均数:每个数乘自己的权重再求和,除以权重之和。 |
编码10 个函数
| 调用 | 说明 |
|---|
| base64编码(值) | 把文本或字节编码成 base64 文本(标准字母表,**带 `=` 填充**)。 |
| base64解码(值) | 把 base64 文本还原成**字节**。 |
| 十六进制编码(值, 大写=假) | 把文本或字节编码成十六进制文本。默认小写。 |
| 十六进制解码(值) | 把十六进制文本还原成**字节**(源码里「写死一串字节」就靠它)。 |
| url编码(值, 保留斜杠=真) | 把文本编码成可以安全放进 URL 的形式(中文会变成 `%E4%B8%AD` 这样)。 |
| url解码(值) | 把 URL 编码的文本还原(`%E4%B8%AD` → `中`)。 |
| 文本字节(值) | 把文本按 UTF-8 转成**字节**。 |
| 字节文本(值) | 把字节按 UTF-8 还原成文本。 |
| GBK文本(值) | 把 **GBK 编码的字节**还原成文本(国内大量老的 CSV / TXT 就是 GBK)。 |
| 文本GBK(值) | 把文本按 **GBK** 转成字节(写给只认 GBK 的旧软件用)。 |
网络6 个函数
| 调用 | 说明 |
|---|
| 获取(网址, 超时=…, 请求头=空) | 用 GET 请求网址,返回响应文本。 |
| 提交(网址, 数据='', 超时=…, 请求头=空) | 用 POST 提交**表单**数据(文本),返回响应文本。 |
| 提交JSON(网址, 对象, 超时=…, 请求头=空) | 用 POST 提交 **JSON**,返回响应文本。 |
| 获取JSON(网址, 超时=…, 请求头=空) | 用 GET 请求一个返回 JSON 的接口,解析成列表/字典。 |
| 获取详情(网址, 超时=…, 请求头=空) | GET 一个网址,把**状态码 / 响应头 / 正文**一起给你,**非 2xx 不报错**。 |
| 下载(网址, 路径, 超时=…, 请求头=空) | GET 一个网址,把响应**原始字节**写进文件,返回字节数。 |
表格18 个函数
| 调用 | 说明 |
|---|
| 读表格(路径) | 读取带表头的 CSV 文件,返回表格对象。 |
| 写表格(路径, 行列表) | 把行列表写进 CSV(覆盖原文件)。第一行应为表头。 |
| 写字典表格(路径, 字典列表) | 把字典列表写进 CSV(键作表头,来自第一个字典)。 |
| 读字典表格(路径) | 读取带表头的 CSV,返回字典列表:[{列名: 值}, ...]。 |
| 追加(路径, 行) | 往 CSV 文件末尾追加一行(文件不存在则创建,注意表头要自己保证)。 |
| 表头(t) | 返回表格的表头(列名列表)。 |
| 数据行(t) | 返回表格的所有数据行(不含表头)。 |
| 挑选(t, 列) | 从表格里挑出一列或多列。 |
| 筛选(t, 列名, 值) | 筛选出「列名」这一列的值等于「值」的行,返回新表格。 |
| 排序按(t, 列名, 倒序=假) | 按某一列排序,返回新表格;「倒序」为 真 时从大到小。 |
| 汇总(t, 列名) | 统计某数字列:个数/总和/平均/最大/最小。 |
| 分组汇总(t, 分组列, 值列) | 按「分组列」的取值分组,对「值列」做统计,返回 `{组: 汇总字典}`。 |
| 连接(表甲, 表乙, 键甲, 键乙='') | 按某一列把两张表**接起来**(只留两边都有的键),返回新表格。 |
| 从记录(记录们) | 把**字典列表**变成表格 —— JSON 接口回来的数据直接能做表格运算。 |
| 转记录(t) | 把表格变成**字典列表** —— 好喂给 `json.写文件` 或 `网络.提交JSON`。 |
| 转置(行列表) | 把「列表的列表」行列互换。 |
| 转文本(t) | 把表格渲染成**给人看**的等宽文本:表头 + 分隔线 + 对齐的数据行。 |
| 转TSV(t) | 把表格变成 **TSV 文本**(制表符分隔)—— 好粘进 Excel / 喂给别的程序。 |
路径24 个函数
| 调用 | 说明 |
|---|
| 连接() | 把若干路径片段连接成一个路径(用系统分隔符)。 |
| 存在(路径) | 路径是否存在(文件或目录)。 |
| 是文件(路径) | 路径是否是一个已存在的文件。 |
| 是目录(路径) | 路径是否是一个已存在的目录。 |
| 绝对路径(路径) | 把相对路径转成绝对路径。 |
| 父目录(路径) | 返回路径的父目录。 |
| 文件名(路径) | 返回路径的最后一段(文件名或目录名)。 |
| 后缀(路径) | 返回文件后缀(含点,如 .txt),无后缀返回空文本。 |
| 无后缀名(路径) | 返回去掉后缀的文件名(如 a.txt → a)。 |
| 当前目录() | 返回当前工作目录。 |
| 主目录() | 返回当前用户主目录。 |
| 创建目录(路径, 递归=假) | 创建目录;递归=真 时自动创建缺失的父目录。返回目录路径。 |
| 删除(路径) | 删除文件或空目录,成功返回真;不存在返回假。 |
| 递归删除(路径) | 递归删除:文件直接删,目录连同**里面的所有东西**一起删;不存在返回假。 |
| 列出(路径) | 列出目录下所有条目(文件+子目录)的名字,按名字排序。 |
| 递归列出(路径, 后缀='') | 递归列出目录下所有文件(含子目录),返回**相对路径**列表,已排序。 |
| 按模式找(目录, 模式='*', 递归=真) | 按**通配模式**找出目录下匹配的文件,返回**相对路径**列表,已排序。 |
| 系统临时目录() | 返回**系统临时目录**的路径(只指出位置,不在磁盘上动任何东西)。 |
| 临时目录(前缀='') | **新建**一个唯一的临时目录并返回它的路径。 |
| 临时文件(后缀='') | **新建**一个唯一的空临时文件并返回它的路径(名字由系统生成)。 |
| 重命名(旧路径, 新路径) | 把文件或目录重命名,返回新路径。 |
| 大小(路径) | 返回文件大小(字节)。 |
| 修改时间(路径) | 返回文件最后修改时间(年-月-日 时:分:秒)。 |
| 分隔符() | 返回系统的**路径分隔符**:Windows 是 `\`,其余是 `/`。 |
迭代14 个函数
| 调用 | 说明 |
|---|
| 归约(可迭代, 合并) | 把一串值**折叠**成一个(通用 `reduce`)。 |
| 分区(可迭代, 判定) | 按「判定」把一串值分成两堆:`[满足的, 不满足的]`。 |
| 分组(可迭代, 每组个数) | 按固定大小分组,返回 [[…], […]](最后组可能短)。 |
| 滑窗(可迭代, 窗口大小, 步长=1) | 滑动窗口:每次取连续 `窗口大小` 个元素,按 `步长` 往后挪。 |
| 去重(可迭代) | 按首次出现的顺序去重,返回列表(要集合类型就用内建 `集合()`)。 |
| 展开(嵌套) | 把「列表的列表」摊平一层。 |
| 取前(可迭代, 个数) | 取前 `个数` 个元素(不足就给全部)。 |
| 取后(可迭代, 个数) | 取后 `个数` 个元素(不足就给全部)。 |
| 求和(可迭代) | 求和(等价于内建 `总和`,放在这里方便 `迭代.求和` 一路写下来)。 |
| 计数(可迭代, 条件) | 数一数有多少元素满足条件(条件是「元素 → 真/假」的函数)。 |
| 累积(可迭代, 初值=0) | 前缀和:返回「每一步累加到目前」的列表,长度与原序列相同。 |
| 组合(可迭代, 取几个) | 从序列里挑 `取几个` 个(**不计顺序**),返回所有组合。 |
| 排列(可迭代, 取几个=-1) | 从序列里挑 `取几个` 个并**计顺序**,返回所有排列。 |
| 笛卡尔积() | 返回多个序列的笛卡尔积(每个序列里各取一个,所有搭配)。 |
配置8 个函数
| 调用 | 说明 |
|---|
| 读JSON(路径, 默认=…) | 读一个 JSON 配置文件。 |
| 写JSON(路径, 数据, 缩进=2) | 把数据写成 JSON 文件(**中文原样保留**,不转成 \uXXXX)。返回文件路径。 |
| 读键值(路径, 默认=…, 分隔符='=') | 读「键 = 值」形式的简单配置文本,返回字典。 |
| 写键值(路径, 配置, 分隔符=' = ') | 把字典写成「键 = 值」形式的配置文本。返回文件路径。 |
| 取(配置, 路径, 默认=…) | 按点号路径取嵌套值:`取(配置, "数据库.端口", 5432)`。 |
| 设(配置, 路径, 值) | 按点号路径设置嵌套值,返回**新的**字典(不改原字典)。 |
| 合并(基础, 覆盖) | 深度合并两个字典(`覆盖` 里的值优先),返回新字典。 |
| 展开(配置, 前缀='') | 把嵌套字典**拍平**成「点号路径 → 值」的一层字典(`取` 的逆操作)。 |
随机6 个函数
| 调用 | 说明 |
|---|
| 随机整数(最小, 最大) | 返回 [最小, 最大] 之间的随机整数(含两端)。 |
| 随机小数() | 返回 0 到 1 之间的随机小数。 |
| 随机选择(序列) | 从序列中随机挑一个元素。 |
| 洗牌(序列) | 把列表顺序打乱,返回新列表(不修改原列表)。 |
| 随机文本(长度, 字符集='字母数字') | 生成一个随机字符串(默认「字母数字」,也可给「数字」做验证码)。 |
| 按权重(选项们, 权重们) | 按权重随机挑一个元素(权重越大概率越高)。 |
内建函数(30 个)
| 名字 | 作用 |
|---|
| 打印 | 输出内容到屏幕 |
| 输入 | 读取用户输入的一行文本 |
| 整数 | 把值转成整数 |
| 小数 | 把值转成小数 |
| 文本 | 把值转成文本 |
| 精确 | 精确("19.99"):转成精确小数,金额/对账用它避开浮点误差 |
| 序数 | 序数(字符):取一个字符的 Unicode 码点,序数("中") 给 20013 |
| 字符 | 字符(码点):由一个码点造出字符,字符(20013) 给「中」(与「序数」互为反函数) |
| 打开 | 打开(路径, 模式=读):返回文件对象,常配「用 … 为 f:」自动关闭 |
| 进入上下文 | 供「用 … 为」脱糖使用:有 进入 就调用,否则返回对象自身 |
| 退出上下文 | 供「用 … 为」脱糖使用:离开代码块时调用 退出 或 关闭 |
| 长度 | 取列表、文本等的长度 |
| 范围 | 生成一段整数序列(范围(5)、范围(1, 5)、范围(1, 5, 2)) |
| 带下标 | 带下标(可迭代, 起始=0):造 [下标, 元素] 对,遍历时想同时拿到序号就用它 |
| 配对 | 配对(甲, 乙, …):按位置把多个列表配成 [甲[i], 乙[i], …],长度取最短的那个 |
| 最大 | 取列表中的最大值 |
| 最小 | 取列表中的最小值 |
| 总和 | 求列表中所有数的和 |
| 类型 | 查看值的类型 |
| 位与 | 位与(甲, 乙):按位与,标志位/掩码用 |
| 位或 | 位或(甲, 乙):按位或 |
| 位异或 | 位异或(甲, 乙):按位异或 |
| 位取反 | 位取反(甲):按位取反,等价于 -甲 - 1 |
| 左移 | 左移(值, 位数):值 × 2^位数 |
| 右移 | 右移(值, 位数):值 ÷ 2^位数(向下取整) |
| 反转 | 反转列表或文本 |
| 断言 | 断言(条件, 消息?):条件不成立就报错,用来尽早发现「不该发生」 |
| 是实例 | 是实例(值, 类):判断值是不是这个类(或其子类)造出来的 |
| 超 | 超():在方法里调基类的同名方法,例如 超().初始化(名字) |
| 集合 | 集合(可迭代):去重造集合(保持首次出现的顺序);集合() 造空集合 |
容器与对象的方法
| 类型 | 方法 |
|---|
| 列表 | `追加`、`插入`、`移除`、`弹出`、`排序`、`反转`、`清空`、`索引`、`计数`、`包含`、`映射`、`过滤`、`排序按`、`归约` |
| 字典 | `获取`、`键`、`值`、`包含`、`更新`、`合并`、`弹出`、`清空` |
| 文本 | `拆分`、`替换`、`查找`、`大写`、`小写`、`去空白`、`开头是`、`结尾是`、`包含`、`转整数`、`转小数` |
| 集合 | `添加`、`移除`、`丢弃`、`包含`、`并集`、`交集`、`差集`、`对称差`、`清空`、`转列表`、`复制` |
| 文件 | `读`、`读行`、`读所有行`、`写`、`写行`、`关闭`、`刷新`、`位置`、`定位` |
| 小数 | `舍入`、`绝对值`、`转文本` |
异常与错误码
能被 捕获 的异常类型:`异常`、`运行期错误`、`类型错误`、`值错误`、`索引错误`、`键错误`、`除零错误`、`文件错误`、`断言错误`。
错误码按阶段分段(词法 E01xx / 语法 E02xx /
语义 E03xx / 运行期 E20xx),报错里会带上码与行列:
错误 E2002:类型错误(「整数」和「文本」不能做「+」运算)
┌─ 例子.jsh:3:6
拿不准某个码什么意思,直接查:
会给出「什么意思 / 常见成因 / 怎么改」三段jishi 错误 E2002
| 码 | 含义 |
|---|
| E0000 | 未知错误 |
| E0100 | 词法错误 |
| E0101 | 缩进错误 |
| E0102 | 缩进混用了 Tab 和空格 |
| E0103 | 缩进中出现了全角空格 |
| E0104 | 字符串没有正常结束 |
| E0105 | 无法识别的字符 |
| E0106 | 关键字与后面的内容粘连了 |
| E0200 | 语法错误 |
| E0201 | 这里出现了意外的内容 |
| E0202 | 这个语句需要一个代码块 |
| E0203 | 这里少了冒号「:」 |
| E0204 | 这里需要一个名字 |
| E0205 | 括号没有闭合 |
| E0300 | 语义错误 |
| E0301 | 找不到这个名字 |
| E0302 | 找不到这个函数 |
| E0303 | 类型不匹配 |
| E0304 | 这个名字不能重复定义 |
| E0305 | 这个东西不能调用 |
| E2000 | 运行期错误 |
| E2001 | 不能除以零 |
| E2002 | 类型错误 |
| E2003 | 索引越界 |
| E2004 | 找不到这个键 |
| E2005 | 数值不对 |
| E2006 | 这个东西不能调用 |
| E2007 | 文件错误 |
| E2008 | 断言没通过 |
| E2009 | 异常 |
| E2010 | 输入结束 |
| E2100 | 程序被中断 |