RandomName 是一个使用 Python 标准库编写的中文命令行随机抽取工具。它从本地 CSV 风格文本中读取人员信息,支持按姓名或编号抽取,并可根据性别和权重改变抽取范围或概率。
当前版本信息见程序内的 about:1.2.0,更新日期为 2026-08-22。项目仍处于 work in progress 阶段。
启动后的主菜单目前显示以下 6 项:
| 菜单项 | 状态 | 行为 |
|---|---|---|
| 单人姓名抽取 | 已实现 | 每次随机抽取 1 个姓名 |
| 多人姓名抽取 | 已实现 | 输入人数后一次抽取多个姓名,不超过数据总数 |
| 单人编号抽取 | 已实现 | 每次随机抽取 1 个编号 |
| 多人编号抽取 | 已实现 | 输入人数后一次抽取多个编号,不超过数据总数 |
| 单人性别选择姓名抽取 | 已实现 | 默认抽取全部,可输入 a 只抽男性,输入 b 只抽女性 |
| 单人动态权重姓名抽取 | 已实现 | 按权重抽取;抽中后降低该人员后续权重 |
在抽取模式的循环中,输入 quit 返回主菜单,输入 exit 退出程序。主菜单中输入 about 可查看版本信息。
- 启动时可选择数据库名称,默认使用
default,配置文件和数据文件分别位于config/与nmls/。 - 配置和数据库文本尝试按 UTF-8、GBK 顺序读取。
- 通过配置指定是否读取编号、姓名、性别、权重,以及各字段所在列和数据行范围。
- 对文件不存在、无权限、编码错误、JSON 格式错误、配置缺少字段、列不存在、整数转换失败等情况输出错误提示。
- 检查
RowStart和RowEnd的顺序,并拒绝空数据库或空数据范围。 - 动态权重拒绝负数权重和总权重不大于 0 的数据;单个权重为 0 是允许的。
- 尚未实现的模式被调用时会输出“敬请期待”。
- 多人姓名抽取支持输入正整数;直接回车相当于抽取 1 人。
- 要求
Python版本需要3.10+。 - 不需要第三方 Python 依赖。
launcher.bat也可以直接运行:
py main.pychmod +x launcher.sh
./launcher.sh或直接执行:
python3 main.py请在项目根目录运行,以便程序找到 config/ 和 nmls/ 目录。
macOS 通常可以直接使用 launcher.sh:
chmod +x launcher.sh
./launcher.sh也可以双击 launcher.command 启动。首次运行前,如果系统阻止执行,请在终端运行:
chmod +x launcher.command数据库是无表头的纯文本文件,每行一条记录,字段使用英文半角逗号分隔。默认数据格式为:
编号,姓名,性别,权重
1,小明,男,100
2,小芳,女,100
3,张三,男,90
实际文件应调整对应 json让数据部分不包含上面的表头。性别字段应包含 男 或 女,且不能同时包含两者;编号和权重需要能转换为整数。数据库文件名必须与配置文件名相同,例如:
config/class.json
nmls/class
配置文件示例:
{
"IncludeNumber": true,
"NumberColumn": 0,
"IncludeName": true,
"NameColumn": 1,
"IncludeSex": true,
"SexColumn": 2,
"IncludeWeight": true,
"WeightColumn": 3,
"RowStart": 0,
"RowEnd": 6
}*Column 使用从 0 开始的列号,RowStart 和 RowEnd 使用从 0 开始的行号,且 RowEnd 包含在读取范围内。某类数据未使用时,将对应的 Include... 设置为 false;使用相关抽取模式前必须提供所需字段。
- 单人抽取使用 Python 的随机选择,每次抽取后数据不会被删除。
- 多人姓名抽取会打乱姓名列表,再取前 N 个结果,因此同一轮不会重复姓名。
- 单人动态权重抽取使用
random.choices按权重选择。抽中对象的权重会变为原权重的平方根取整,后续抽中概率随之降低;权重较小时程序会先整体放大。 - 当前实现没有保存抽取历史,也没有保证跨次运行不重复。
代码和 allmode.txt 已预留 24 种模式的命名,其中以下功能目前仍是空实现或尚未接入主菜单:
- 多人性别筛选姓名、单人/多人性别筛选编号
- 单人/多人静态权重姓名和编号抽取
- 单人/多人权重结合性别筛选的姓名和编号抽取
- 多人动态权重姓名和编号抽取
- 动态权重结合性别筛选的单人/多人姓名和编号抽取
后续还应完善以下基础能力:
- 改用可靠的 CSV 解析,正确处理字段中的逗号、空行和行尾换行符。
- 增加测试、抽取历史/去重策略、更多数据格式和更优的随机数方案。
main.py 主程序、文件读取和主菜单
models/__init__.py 人员数据结构与抽取模式
config/*.json 与数据库同名的读取配置
nmls/* 与配置同名的人员数据文件
allmode.txt 全部模式名称与函数名的规划清单
launcher.bat Windows 启动脚本
launcher.sh Linux 启动脚本
launcher.command macOS 启动脚本
本 README 以当前源代码为准,未实现的模式会明确标注为规划或暂不可用。