diff --git a/README.md b/README.md index 9126a30..17200a0 100644 --- a/README.md +++ b/README.md @@ -106,11 +106,19 @@ python proxyPool.py server ### 工具特点 - 支持自定义导出文件名(在脚本开头修改 `EXPORT_FILENAME` 变量即可) -- 自动导出所有字段,字段顺序与数据库一致 +- 自动导出所有字段,字段顺序与数据库一致(含新增的 `school_level` 学校层级列) - 按省份、学校名称排序,方便查阅 - 分批导出(每批1000行),即使数据量很大(如14万行)也不会内存爆炸 - 生成的 csv 文件可直接用 Excel 打开,无乱码 +### 导出字段说明 + +导出的 CSV 文件包含 `major` 表所有字段,其中: + +- **`school_name`**:学校名称 +- **`school_level`**:学校层级,取值为 `985`、`211`、`双一流` 的斜杠拼接组合(如 `985/211/双一流`),未匹配时为空字符串 +- 其余字段含义见数据库表注释 + ### 使用方法 1. 确保已完成数据库配置,并已安装依赖。 diff --git a/data/db.py b/data/db.py index e94834f..c4625ac 100644 --- a/data/db.py +++ b/data/db.py @@ -7,6 +7,7 @@ from config import config from data import entity from data.entity import Major +from data.school_level import get_school_level database = config.get('database', {}) @@ -35,6 +36,7 @@ def insert(item): exam_subjects[3] = km.get("km4Vo", {}).get("kskmmc", "") major = Major( school_name=item.get("dwmc"), + school_level=get_school_level(item.get("dwmc", "")), major_name=item.get("zymc"), province=item.get("szss"), major_code=item.get("zydm"), diff --git a/data/entity.py b/data/entity.py index c2cdc8f..e4ef059 100644 --- a/data/entity.py +++ b/data/entity.py @@ -8,6 +8,7 @@ class Major(Base): id = Column(Integer, primary_key=True, autoincrement=True, comment='主键') school_name = Column(String(255), nullable=True, comment='学校名称') + school_level = Column(String(50), nullable=True, comment='学校层级(985/211/双一流)') major_name = Column(String(255), nullable=True, comment='专业名称') province = Column(String(255), nullable=True, comment='所在省份') major_code = Column(String(255), nullable=True, comment='专业代码') diff --git a/data/school_level.py b/data/school_level.py new file mode 100644 index 0000000..585967c --- /dev/null +++ b/data/school_level.py @@ -0,0 +1,145 @@ +"""学校层级映射数据 + +数据来源:985工程、211工程、双一流(第二轮,2022年)官方名单。 +若一所学校同时属于多个层级,get_school_level() 返回值以斜杠拼接,例如 "985/211/双一流"。 +未匹配到时返回空字符串。 +""" + +# 985工程高校(39所) +SCHOOLS_985 = { + "北京大学", "清华大学", "中国人民大学", "北京航空航天大学", "北京理工大学", + "中国农业大学", "北京师范大学", "中央民族大学", "南开大学", "天津大学", + "大连理工大学", "吉林大学", "哈尔滨工业大学", "复旦大学", "同济大学", + "上海交通大学", "华东师范大学", "南京大学", "东南大学", "浙江大学", + "中国科学技术大学", "厦门大学", "山东大学", "中国海洋大学", "武汉大学", + "华中科技大学", "湖南大学", "中南大学", "中山大学", "华南理工大学", + "四川大学", "重庆大学", "电子科技大学", "西安交通大学", "西北工业大学", + "兰州大学", "西北农林科技大学", "国防科技大学", "东北大学", +} + +# 211工程高校(116所,含全部985高校) +SCHOOLS_211 = SCHOOLS_985 | { + # 北京 + "北京交通大学", "北京工业大学", "北京科技大学", "北京化工大学", + "北京邮电大学", "对外经济贸易大学", "中央财经大学", "北京外国语大学", + "中国传媒大学", "中央音乐学院", "北京体育大学", "中国政法大学", + "华北电力大学", "中国矿业大学(北京)", "中国地质大学(北京)", + "中国石油大学(北京)", "北京林业大学", "中国中医科学院", + # 天津 + "天津医科大学", "河北工业大学", + # 辽宁 + "辽宁大学", "大连海事大学", + # 吉林 + "延边大学", "东北师范大学", + # 黑龙江 + "哈尔滨工程大学", "东北农业大学", "东北林业大学", + # 上海 + "华东理工大学", "东华大学", "上海外国语大学", "上海财经大学", "上海大学", + # 江苏 + "苏州大学", "南京师范大学", "南京航空航天大学", "南京理工大学", + "中国矿业大学", "河海大学", "江南大学", "南京农业大学", "中国药科大学", + # 浙江(无额外) + # 安徽 + "安徽大学", "合肥工业大学", + # 福建 + "福州大学", + # 江西 + "南昌大学", + # 山东 + "中国石油大学(华东)", + # 河南 + "郑州大学", + # 湖北 + "武汉理工大学", "中国地质大学(武汉)", "华中师范大学", + "华中农业大学", "中南财经政法大学", + # 湖南 + "湖南师范大学", + # 广东 + "暨南大学", "华南师范大学", + # 广西 + "广西大学", + # 海南 + "海南大学", + # 四川 + "西南交通大学", "西南财经大学", + # 重庆 + "西南大学", + # 贵州 + "贵州大学", + # 云南 + "云南大学", + # 西藏 + "西藏大学", + # 陕西 + "西安电子科技大学", "长安大学", "西北大学", + # 甘肃(无额外) + # 内蒙古 + "内蒙古大学", + # 宁夏 + "宁夏大学", + # 新疆 + "新疆大学", + # 青海 + "青海大学", + # 石河子 + "石河子大学", + # 太原 + "太原理工大学", +} + +# 双一流高校(第二轮,2022年,147所) +SCHOOLS_SHUANGYILIU = SCHOOLS_985 | { + # 世界一流大学建设高校(非985) + "郑州大学", "云南大学", "新疆大学", + # 世界一流学科建设高校 + "北京交通大学", "北京工业大学", "北京科技大学", "北京化工大学", + "北京邮电大学", "北京林业大学", "北京协和医学院", "北京中医药大学", + "对外经济贸易大学", "中央财经大学", "北京外国语大学", "中国传媒大学", + "中央音乐学院", "北京体育大学", "中国政法大学", "华北电力大学", + "中国矿业大学(北京)", "中国地质大学(北京)", "中国石油大学(北京)", + "天津工业大学", "天津医科大学", "天津中医药大学", "河北工业大学", + "太原理工大学", "内蒙古大学", + "辽宁大学", "大连海事大学", + "延边大学", "东北师范大学", + "哈尔滨工程大学", "东北农业大学", "东北林业大学", + "华东理工大学", "东华大学", "上海外国语大学", "上海财经大学", + "上海大学", "上海中医药大学", + "苏州大学", "南京师范大学", "南京航空航天大学", "南京理工大学", + "中国矿业大学", "河海大学", "江南大学", "南京农业大学", "中国药科大学", + "南京医科大学", + "安徽大学", "合肥工业大学", + "福州大学", + "南昌大学", + "中国石油大学(华东)", + "武汉理工大学", "中国地质大学(武汉)", "华中师范大学", + "华中农业大学", "中南财经政法大学", + "湖南师范大学", + "暨南大学", "华南师范大学", "南方科技大学", "广州中医药大学", + "广西大学", + "海南大学", + "西南交通大学", "西南财经大学", "成都理工大学", + "西南大学", + "贵州大学", + "西藏大学", + "西安电子科技大学", "长安大学", "西北大学", + "宁夏大学", + "石河子大学", + "青海大学", +} + + +def get_school_level(school_name: str) -> str: + """根据学校名称返回层级标签(985/211/双一流)。 + + 若学校属于多个层级,用斜杠拼接(如 "985/211/双一流")。 + 未匹配到任何层级时返回空字符串。 + """ + name = school_name.strip() if school_name else "" + levels = [] + if name in SCHOOLS_985: + levels.append("985") + if name in SCHOOLS_211: + levels.append("211") + if name in SCHOOLS_SHUANGYILIU: + levels.append("双一流") + return "/".join(levels) diff --git a/yzw.sql b/yzw.sql index 61ace7f..a57e52e 100644 --- a/yzw.sql +++ b/yzw.sql @@ -23,6 +23,7 @@ SET FOREIGN_KEY_CHECKS = 0; DROP TABLE IF EXISTS `major`; CREATE TABLE `major` ( `school_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '学校名称', + `school_level` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '学校层级(985/211/双一流)', `major_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '专业名称', `province` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '所在省份', `major_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '专业代码',