批量生成多国家Jupyter Notebook分析HTML报告的脚本需求及问题
批量自动化Jupyter Notebook国家队列分析报告生成脚本
问题背景
现有一份名为OneHRHelpDeskTicketCountryReport.ipynb的Jupyter Notebook数据分析文件,手动流程为:
- 替换顶部
country变量为不同国家/队列值 - 执行Notebook生成图表和表格
- 运行
!jupyter nbconvert OneHRHelpDeskTicketCountryReport.ipynb --no-input --no-prompt --to html生成无输入的HTML报告并重命名 - 重复上述流程覆盖所有目标国家/队列
此前使用ChatGPT生成的脚本存在两个问题:
country变量未被正确替换- 未完成HTML报告转换
需要实现以下自动化功能:
- 批量遍历指定国家/队列列表
- 替换Notebook中的
country变量 - 执行Notebook生成分析结果
- 转换为不含输入和提示的HTML报告
完整解决方案脚本
import papermill as pm import nbformat from nbconvert import HTMLExporter import os # 配置参数 SOURCE_NOTEBOOK = "OneHRHelpDeskTicketCountryReport.ipynb" TARGET_DIR = "country_reports" COUNTRIES = ["USA", "Canada", "UK", "Australia", "Germany"] # 替换为你的目标国家/队列列表 KERNEL_NAME = "python3" # 替换为你的Notebook使用的内核名称 # 创建目标目录 os.makedirs(TARGET_DIR, exist_ok=True) for country in COUNTRIES: output_notebook = os.path.join(TARGET_DIR, f"report_{country}.ipynb") output_html = os.path.join(TARGET_DIR, f"report_{country}.html") try: # 1. 参数化执行Notebook,自动替换country变量 pm.execute_notebook( input_path=SOURCE_NOTEBOOK, output_path=output_notebook, parameters={"country": country}, kernel_name=KERNEL_NAME ) # 2. 转换为无输入提示的HTML报告 exporter = HTMLExporter() exporter.exclude_input = True exporter.exclude_input_prompt = True exporter.exclude_output_prompt = True # 读取执行后的Notebook并转换 nb = nbformat.read(output_notebook, as_version=4) html_content, _ = exporter.from_notebook_node(nb) # 保存HTML文件 with open(output_html, "w", encoding="utf-8") as f: f.write(html_content) print(f"✅ 完成{country}报告生成:{output_html}") except Exception as e: print(f"❌ 处理{country}时出错:{str(e)}") # 清理失败产生的临时文件 if os.path.exists(output_notebook): os.remove(output_notebook)
关键步骤说明
参数化替换优化:放弃手动代码行替换,改用
papermill实现参数化执行。需提前在源Notebook中设置参数单元格:在源Notebook中添加一个单元格,标记为「Parameters」(Jupyter工具栏可设置单元格标签),并写入:
country = "" # 此值会被papermill自动替换Notebook执行:
papermill会完整运行所有单元格,自动生成并保存图表、表格等分析结果到输出Notebook中。HTML转换:使用
nbconvert的HTMLExporter,通过配置参数确保HTML仅保留分析输出内容,剔除所有代码输入和提示信息。异常处理:针对每个国家的处理流程添加异常捕获,出错时自动清理临时文件,避免残留无效文件。
内容的提问来源于stack exchange,提问作者Paulo Cortez
相关产品推荐
相关产品推荐

