如何在Jupyter Notebook中循环交替变量值执行Python脚本?
解决Jupyter Notebook遍历文件自动重运行单元格的方法
方法1:重构代码为函数(最推荐)
把分散在20个单元格里的处理逻辑封装成一个接受文件参数的函数,再循环遍历文件列表调用它——这和R里把处理逻辑写成函数后用lapply遍历的思路完全一致,逻辑清晰且易维护。
操作步骤:
- 整理原有逻辑为函数:
def process_file(target_file): # 把原来20个单元格里的代码迁移到这里,所有用到variable_file的地方替换成target_file # 示例流程:读取文件→处理→返回结果 import pandas as pd data = pd.read_csv(target_file) # 中间数据清洗、计算等步骤 result = data['target_column'].sum() # 示例结果 return result - 循环遍历文件列表批量处理:
variable_file = ['file_1.csv', 'file_2.csv', 'file_3.csv'] # 你的文件列表 all_results = [] for file in variable_file: print(f"正在处理: {file}") res = process_file(file) all_results.append(res) print(f"{file} 处理完成,结果: {res}\n") # 汇总输出所有结果 print("全部处理结果:") for file, res in zip(variable_file, all_results): print(f"{file}: {res}")
方法2:用IPython API控制单元格循环运行
如果不想重构代码,可以借助IPython的API全局赋值变量,再循环运行指定单元格(适合临时快速测试):
from IPython import get_ipython ip = get_ipython() variable_file = ['file_1.csv', 'file_2.csv', 'file_3.csv'] for file in variable_file: # 将当前文件赋值为全局变量,让所有引用variable_file的单元格能读取到 globals()['variable_file'] = file print(f"开始处理 {file}") # 运行指定范围的单元格(假设处理逻辑在第2到第21个单元格,索引从0开始) for cell_idx in range(1, 21): ip.run_cell(cell_idx) print(f"{file} 处理完成\n")
方法3:用nbconvert命令行批量运行
适合自动化批量处理场景,类似R里用命令行循环运行R脚本并传参:
- 先修改你的Notebook开头,支持接收命令行参数:
import sys # 命令行运行时取传入的文件参数,交互式运行时用默认值 if len(sys.argv) > 1: variable_file = sys.argv[1] else: variable_file = 'file_1.csv' - 在终端循环遍历文件,调用nbconvert运行Notebook:
for file in file_1.csv file_2.csv file_3.csv; do jupyter nbconvert --to notebook --execute --inplace --ExecutePreprocessor.timeout=600 your_notebook.ipynb --ExecutePreprocessor.argv="$file" # 将结果另存为带文件名的新Notebook cp your_notebook.ipynb result_${file%.csv}.ipynb done
内容的提问来源于stack exchange,提问作者kdmarcopulos
相关产品推荐
相关产品推荐

