xiaowei-system/skills/devops/devops-umbrella/references/gaokao-site/data-import-workflow.md

1.8 KiB
Raw Blame History

高考数据导入工作流

数据源格式

你给的河南高考数据是 xlsx 格式,覆盖 2017-2025 年:

  • 一分一段表yiyi 表)
  • 投档线schools 表)
  • 专业录取分majors 表)

核心问题:文件名编码损坏

zip 解压后中文文件名变为乱码UTF-8 字节被误解为 Latin-1河南ц▓│хНЧ专业分数线ф╕Уф╕ЪхИЖцХ░ч║┐

解决:不用文件名匹配,用 Excel 列头检测文件类型:

h1 = ws.cell(1,1).value
# 一分一段: h1='分数' (旧) 或 h1='年份' + C3='批次' (新)
# 投档线:   h1='年份' + h2='学校' + C9='科类'
# 专业分:   同时存在'学校'列 + '专业'列

导入流程

  1. 全量 xlsx 上传到服务器 /tmp/import_data/
  2. subprocess.run(['find',...]) 获取所有 xlsx 路径
  3. 遍历每个文件,根据列头判断类型
  4. 动态映射列:扫描 header 行建 {column_name: col_index} 字典
  5. INSERT OR IGNORE 避免重复

列名映射

一分一段表

字段 旧格式(2017-2021) 新格式(2022+)
score 分数(第1列) 分数(第5列)
count 人数(第2列) 本段人数(第6列)
rank 累计人数(第3列) 累计人数(第7列)
subject 文件名推断文/理 科类(第2列)

投档线 (2017-2022 统一格式)

C1=年份, C2=学校, C9=科类(理→物理类), C10=批次, C11=最低分, C12=排名

专业分 (2017-2021 统一格式)

学校 | 科类 | 专业 | 平均分(优先) | 最低分(备选) | 最低分位次

2025 专业分 (你给的文件)

包含 school_type(公办/民办/独立学院/中外合作)、is_985is_211 字段。 替换 2025 年 majors 数据时保留不在新文件中的 206 校旧数据。