医数智联·第 24 期:Claude Code + Python 自动化 —— 让脚本「自己写自己跑」的 4 大模式
[!ABSTRACT] 核心摘要
本期主题 :Claude Code + Python——让 AI 替你写、改、跑、修脚本
核心结论 :AI 编程不是「取代程序员」,是「让不写代码的医院人也能自动化」
4 大模式 :脚本生成 (自然语言 → Python)、自动调试 (报错 → 自动修)、代码重构 (优化性能)、批量运行 (多个脚本)
典型效果 :从「学 3 个月 Python」变成「自然语言说需求,5 分钟出脚本」
阅读时长 :约 10 分钟
一、场景引入:不会 Python,怎么自动化?
[!example] 一个真实的周二下午 质管办小张想做 3 件事:
把本月首页数据从 HIS 导出 → 自动校验 → 自动生成报告
把 100 份投诉案例自动分类(服务态度/医疗质量/费用/沟通)
每天早上自动生成昨日质控数据看板
但他完全不会 Python ——上个月学的「print(‘hello’)」早忘了。
传统路径 :
找信息科 → 等 1 周
自己学 → 3 个月还卡在「pandas 导入」
找外包 → 报价 5 万
Claude Code 路径 :
输入自然语言需求 → AI 写脚本 → AI 跑 → 5 分钟搞定
这是 AI 编程时代医院人的新选择——不再被「不会写代码」绑架 。
[!quote] 狼叔的判断“2026 年,’会不会写代码’不再是医院人的瓶颈;’会不会用 AI 写代码’才是。” 这一期,带你掌握 4 大 AI 编程模式。
二、工具原理:AI 编程的 4 大模式 2.1 模式 1:脚本生成 1 你说需求 → AI 写代码 → AI 跑 → 结果
2.2 模式 2:自动调试 1 你跑报错 → 把报错贴给 AI → AI 修 → 重跑
2.3 模式 3:代码重构 1 现有脚本太慢 → AI 优化 → 性能提升 5 倍
2.4 模式 4:批量运行 1 10 个相似任务 → AI 写 1 个通用脚本 → 跑 10 次
三、医院实战:4 大模式详解 模式 1:脚本生成(自然语言 → Python)
[!example] 实战 ①:自然语言生成脚本
场景 :把本月首页数据从 MySQL 导出,统计错误率,画图,生成 Excel。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 👤 你:帮我写一个 Python 脚本: 1. 从 MySQL 读「本月首页」表(2026-07 出院) 2. 统计每个科室的错误率和错误数 3. 用 matplotlib 画柱状图(错误率降序) 4. 生成 Excel 文件 5. 错误日志用 logging 记录到文件 数据库连接信息: - host=192.168.1.100 - user=quality_user - password=xxx - database=his_db 输出: - 本月错误率统计.xlsx - 本月错误率柱状图.png 🤖 Claude Code: 好的,这是完整脚本(已写入 D:\scripts\本月错误率.py): import pandas as pd import pymysql import matplotlib.pyplot as plt import logging from pathlib import Path # 配置日志 logging.basicConfig( level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s', handlers=[ logging.FileHandler('本月错误率.log', encoding='utf-8'), logging.StreamHandler() ] ) def main(): try: # 1. 连接数据库 logging.info('连接数据库...') conn = pymysql.connect( host='192.168.1.100', user='quality_user', password='xxx', database='his_db', charset='utf8mb4' ) # 2. 读数据 logging.info('读取本月首页...') df = pd.read_sql(''' SELECT 病案号, 科室, 主诊错误标记 FROM 首页主表 WHERE 出院日期 >= '2026-07-01' AND 出院日期 < '2026-08-01' ''', conn) conn.close() logging.info(f'共 {len(df)} 条记录') # 3. 统计 统计 = df.groupby('科室').agg( 总数=('病案号', 'count'), 错误数=('主诊错误标记', 'sum') ).reset_index() 统计['错误率'] = (统计['错误数'] / 统计['总数'] * 100).round(2) 统计 = 统计.sort_values('错误率', ascending=False) # 4. 输出 Excel 统计.to_excel('本月错误率统计.xlsx', index=False) logging.info('✓ Excel 已生成') # 5. 画图 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False fig, ax = plt.subplots(figsize=(10, 6)) ax.bar(统计['科室'], 统计['错误率'], color='steelblue', edgecolor='black') ax.set_title('本月各科室主诊错误率', fontsize=14, fontweight='bold') ax.set_xlabel('科室') ax.set_ylabel('错误率(%)') plt.xticks(rotation=45, ha='right') plt.tight_layout() plt.savefig('本月错误率柱状图.png', dpi=300) logging.info('✓ 柱状图已生成') print('\n✓ 全部完成!') print(' - 本月错误率统计.xlsx') print(' - 本月错误率柱状图.png') except Exception as e: logging.error(f'脚本失败:{e}') raise if __name__ == '__main__': main() 要我直接跑吗?(y/n)
[!success] AI 写脚本的 5 大优势
代码规范 :有 logging、异常处理、main 函数
注释完整 :每个步骤都清晰
错误处理 :try/except 包裹
自动跑 :你说跑,AI 立即执行
可复用 :保存到 scripts 文件夹,下次直接用
模式 2:自动调试(报错 → 自动修)
[!example] 实战 ②:自动修 bug
场景 :跑上面的脚本,报错了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 👤 你:我跑了这个脚本,报错了: Traceback (most recent call last): File "本月错误率.py", line 45, in <module> df = pd.read_sql(sql, conn) File "...\pandas\io\sql.py", line 762, in read_sql return pandas_sql.read_query(...) pandas.io.sql.DatabaseError: Execution failed on sql: [...上面 SQL 语句...] (1146, "Table 'his_db.首页主表' doesn't exist") 🤖 Claude Code: 我看到错误了 — 表名「首页主表」在 your 数据库里不存在。 可能的原因: 1. 表名拼写错误(应该是「his_main」?) 2. 表在其他 schema 3. 数据库连接错 让我先查一下你的数据库有哪些表... (查询 INFORMATION_SCHEMA.TABLES) 找到 3 个候选表: - his_db.medical_record_main(可能) - his_db.case_main(可能) - his_db.inpatient_main(可能) 你确认一下正确的表名,我帮你改 SQL。 👤 你:是 his_db.inpatient_main,字段名也不一样,英文的: - record_id(病案号) - dept_name(科室) - error_flag(主诊错误标记) - discharge_date(出院日期) 🤖 Claude Code: 好的,我改一下 SQL: df = pd.read_sql(''' SELECT record_id AS 病案号, dept_name AS 科室, error_flag AS 主诊错误标记 FROM inpatient_main WHERE discharge_date >= '2026-07-01' AND discharge_date < '2026-08-01' ''', conn) 要我重新跑吗?(y/n)
[!success] AI 调试的 3 大优势
不用懂错误代码 :贴报错 → AI 自动分析
自动探索数据库 :帮你找正确的表名
一步到位 :改完立刻重跑,不用复制粘贴
模式 3:代码重构(优化性能)
[!example] 实战 ③:把 30 秒脚本优化到 0.5 秒
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 👤 你:D:\scripts\首页校验.py 这个脚本,跑 1 万条首页要 30 秒, 帮我优化一下,要求 5 秒内跑完 🤖 Claude Code: 好的,我看一下原脚本... (读取脚本) 找到 3 个性能瓶颈: 1. 用 iterrows() 循环 → 改用向量化操作 2. 没建索引 → 加缓存 3. 重复读 Excel → 改为一次读 优化后版本(性能预估 0.5 秒): import pandas as pd # 1. 一次读 Excel df = pd.read_excel('本月首页.xlsx') # 2. 向量化校验(替代 iterrows) def 校验必填(df): """向量化校验必填字段""" errors = [] 必填字段 = ['病案号', '出院日期', '主诊ICD'] # 用 stack + isna 替代逐行检查 缺失 = df[必填字段].isna().stack() 缺失 = 缺失[缺失] for (idx, field), _ in 缺失.items(): errors.append({ '病案号': df.loc[idx, '病案号'], '类型': '必填校验', '说明': f'{field} 为空', '等级': '严重' }) return pd.DataFrame(errors) # 3. 主流程 错误清单 = pd.concat([ 校验必填(df), # ... 其他校验 ], ignore_index=True) 错误清单.to_excel('校验结果.xlsx', index=False) 性能提升 60 倍(30 秒 → 0.5 秒)
模式 4:批量运行(1 个通用脚本 → 跑 10 次)
[!example] 实战 ④:批量生成 12 个月的报告
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 👤 你:我有过去 12 个月的数据,每月一个 Excel,文件名前缀「2025-08-」到「2026-07-」, 帮我写一个脚本: 1. 自动遍历这 12 个文件 2. 每个月跑一次首页错误率统计 3. 输出 12 个统计 Excel + 1 个汇总 Excel(12 个月错误率趋势) 🤖 Claude Code: 好的,这是脚本: import pandas as pd from pathlib import Path import matplotlib.pyplot as plt # 配置 月份列表 = pd.date_range('2025-08-01', '2026-07-01', freq='MS') 所有结果 = [] for 月份 in 月份列表: 文件名 = f'首页_{月份.strftime("%Y-%m")}.xlsx' if not Path(文件名).exists(): print(f'⚠ {文件名} 不存在,跳过') continue # 读本月数据 df = pd.read_excel(文件名) # 统计 总数 = len(df) 错误数 = df['主诊错误标记'].sum() 错误率 = round(错误数 / 总数 * 100, 2) 所有结果.append({ '月份': 月份.strftime('%Y-%m'), '总数': 总数, '错误数': 错误数, '错误率': 错误率 }) # 本月 Excel 本月统计 = df.groupby('科室').agg( 总数=('病案号', 'count'), 错误数=('主诊错误标记', 'sum') ).reset_index() 本月统计['错误率'] = (本月统计['错误数'] / 本月统计['总数'] * 100).round(2) 本月统计.to_excel(f'统计_{月份.strftime("%Y-%m")}.xlsx', index=False) # 汇总 Excel 汇总 = pd.DataFrame(所有结果) 汇总.to_excel('12个月汇总.xlsx', index=False) # 趋势图 plt.rcParams['font.sans-serif'] = ['SimHei'] fig, ax = plt.subplots(figsize=(12, 6)) ax.plot(汇总['月份'], 汇总['错误率'], marker='o', linewidth=2) ax.set_title('过去 12 个月错误率趋势', fontsize=14, fontweight='bold') ax.set_xlabel('月份') ax.set_ylabel('错误率(%)') plt.xticks(rotation=45) plt.tight_layout() plt.savefig('12个月趋势.png', dpi=300) print('✓ 全部完成!') 要我跑吗?(y/n)
四、避坑指南:5 个让 AI 编程「翻车」的常见错误
[!warning] 雷区 ①:需求太模糊症状 :AI 写的脚本不是你想要的。解决 :需求要具体 :列字段、表名、输出格式。
1 2 ❌ 「帮我写个首页分析的脚本」 ✅ 「帮我写脚本:从 MySQL 读 inpatient_main 表(字段:record_id, dept_name, error_flag),按 dept_name 分组统计 error_flag=1 的占比,输出 Excel,中文 SimHei 字体,跑 5 秒内」
[!warning] 雷区 ②:不验证 AI 写的结果症状 :AI 跑完了,你没检查,数字错了都不知道 。解决 :永远人工 spot-check :
1 👤 「结果给我看下,挑 5 个科室,我自己手动算一下验证」
[!warning] 雷区 ③:敏感信息明文症状 :脚本里写了数据库密码,传到 GitHub 泄露了 。解决 :用环境变量 :
1 2 import osPASSWORD = os.environ['DB_PASSWORD' ]
[!warning] 雷区 ④:AI 写的脚本不存症状 :每次都要重新让 AI 写,重复劳动 。解决 :AI 写完 → 保存 → 维护 :
1 2 3 4 5 D:\scripts\ drg_筛查.py 首页校验.py 月度报告.py weekly_汇总.py
[!warning] 雷区 ⑤:不学基础就完全依赖症状 :AI 写错你看不出来。解决 :学第 14-21 期的 Python 基础 ,能判断 AI 写得对不对。
五、把 AI 编程嵌入日常工作流
[!TIP] 实战:质管人的「AI 编程日常」
时段
任务
Claude Code 怎么帮
早上 8:30
跑昨天数据
「跑 D:\scripts\昨日数据.py」
上午 10:00
新需求
「写个新脚本,XXX」
下午 3:00
报错
「脚本报错了,帮我看」
晚上 8:00
优化
「这个脚本太慢,帮我优化」
每天 30 分钟 AI 编程 = 工作效率提升 10 倍
六、下期预告
[!quote] 第 25 期Claude Code + SQL 查询 —— 让数据库「听得懂人话」的 3 大玩法
这一期,带你用 Claude Code 直接连接 MySQL/PostgreSQL,自然语言问数据 ,告别写 SQL。
[!TIP] 互动 如果你觉得这篇「医数智联·第 24 期」对你有用,请点赞、在看、转发 给科里的同事。
文中 4 大模式的 prompt 模板、调试技巧,我已经整理成「Claude Code 编程工具包」。点击「阅读原文」可直接下载 。
我是白衣狼,一个用数字化工具把医院管理做「轻」的实战派。咱们下期见。