Skip to content

About

一个简单的Python CLI 姓名抽取程序

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

50 Commits

Folders and files

Repository files navigation

RandomName

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 依赖。

快速开始

Windows

launcher.bat

也可以直接运行:

py main.py

Linux

chmod +x launcher.sh
./launcher.sh

或直接执行:

python3 main.py

请在项目根目录运行,以便程序找到 config/ 和 nmls/ 目录。

macOS

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 以当前源代码为准,未实现的模式会明确标注为规划或暂不可用。

About

一个简单的Python CLI 姓名抽取程序

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages