Pre-release
This release is a pre-release and may not be stable for production use.
wenjuanxing-parser 📊
wenjuanxing-parser 是一个专为 CollegesChat 校园生活现状调研问卷定制的非通用数据解析与文本清洗工具。
本项目正处于 Beta 阶段。它打破了传统表格的行列限制,通过将问卷星导出的原始矩阵数据横向聚合,自动转换为利于阅读、排版和开源共享的精简文本格式。
✨ 特性
- 非通用定制化解析:精准支持以下高阶/复合题型:
- 单选题(支持可选的“其他”附加文本)
- 多选题(支持可选的“其他”附加文本)
- 单项填空题(支持基于正则表达式的弱校验)
- 多项填空题(支持复合空格拆分)
- 智慧文件识别:命令行支持自动识别并读取
.csv或.xlsx(Excel) 格式的原始问卷数据。 - 类型安全的答案解析:内层模型(
QuestionnaireResponse、UserAnswer、BasicData等)基于Pydantic构建,保障元数据(IP 归属地、提交时间、序号)与答案结构的类型可靠。 - 懒加载:
from_dataframe()返回可迭代对象,按需逐行解析,不一次性物化全量数据。 - 可选业务校验:
validate=True开启必填项检查与正则弱校验,默认关闭以最大化吞吐。 - 智能化流式美化:自动处理附加文本前置标點符號,保证导出的文本排版优雅统一。
📦 安装与准备
项目使用现代 Python 包管理工具 uv 进行环境管理。
# 克隆仓库
git clone https://github.com/CollegesChat/wenjuanxing-parser
cd wenjuanxing-parser
# 同步并安装依赖环境
uv sync
🚀 快速使用
安装:
pip install wenjuanxing-parser[all] # 安装推荐的YAML(py-yaml12,用于问卷schema) + xlsx(python-calamine) 格式支持库
pip install wenjuanxing-parser # 仅安装数据处理模块,数据用你自己的库读
使用方法
- 先编写问卷schema:例子
- 下载问卷的答卷(按文本)
- 用你的代码调用此库,示例:
import polars as pl
from yaml12 import parse_yaml
from wenjuanxing_parser import QuestionnaireData, load_questions_from_yaml
questions_map = load_questions_from_yaml(parse_yaml(yaml_text))
df = pl.read_csv("data.csv")
# 懒加载迭代:按需逐行解析,任意时刻仅一条 response 在内存
for response in QuestionnaireData.from_dataframe(df, questions_map):
print(response.metadata.num, response.answers)
完整命令行入口参见:__main__.py
命令行参数说明
以下只能在安装了wenjuanxing-parser[all]后使用。
| 参数 | 短参数 | 默认值 | 说明 |
|---|---|---|---|
--data |
-d |
data.csv |
问卷星导出的原始数据文件路径 (支持 .csv/.xlsx) |
--config |
-c |
v2.yaml |
对应 CollegesChat 标准的题库定义 YAML 路径 |
--output |
-o |
None |
导出的文本路径 (留空则直接打印在终端控制台) |
🎯 导出文本示例
Q: 宿舍是上床下桌吗?
A21136: 否。六人寝上下床,大一只有一张长桌,非常非常挤。
A21335: 否
A21818: 否,大一校区和本部都不是
Q: 教室和宿舍有没有空调?
A21335: 有,我是大一新生,北校区有的
A21818: 有,宿舍均有空调,本部部分常用教室没有空调
🧪 自动化测试
项目内置了完整的单元测试,利用 pytest 虚拟沙盒环境(tmp_path)对解析管线和强弱校验逻辑进行自动化覆盖。
执行以下命令运行测试:
uv run pytest
注意:本项目在打包与构建发布时,已通过
pyproject.toml策略自动将tests/目录和临时配置排除在 Wheel 包外,确保生产环境轻量纯净。
📄 开源协议
本项目采用 AGPL-3.0-only 协议开源。
Release files for wenjuanxing-parser 0.3.0b1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| wenjuanxing_parser-0.3.0b1.tar.gz | 65.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| wenjuanxing_parser-0.3.0b1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 96.3 kB
Release files / wenjuanxing_parser-0.3.0b1.tar.gz
| Download URL | wenjuanxing_parser-0.3.0b1.tar.gz |
|---|---|
| Size | 65.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9df5bbb81d702e93bbb390ab0ca9079978f67669ff75f8112610331d0662328a
|
|
BLAKE2b-256 checksum How to use checksums |
44b038fba1941c504a66fdae375dc6330de12c37e948daabe4445f31932de0fc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.27 {"installer":{"name":"uv","version":"0.11.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / wenjuanxing_parser-0.3.0b1-py3-none-any.whl
| Download URL | wenjuanxing_parser-0.3.0b1-py3-none-any.whl |
|---|---|
| Size | 30.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4d8a5949646b1e3f81eb857e3126805251d2c000c61b821db63c96281e060f6f
|
|
BLAKE2b-256 checksum How to use checksums |
c10be2813c709d1d433b362c41993a16336161d2d99d82483d7cb71bd370d530
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.27 {"installer":{"name":"uv","version":"0.11.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|