如何将Jupyter Notebook字符串转为Python程序并自动添加print语句?
将Jupyter Notebook代码自动转换为Python程序(自动添加print)
要解决Jupyter代码转Python时自动给输出语句加print的问题,靠简单的字符判断(比如只校验字母下划线)肯定不够,像data['col'].mean()这类带特殊符号的表达式会直接漏判。最靠谱的方案是用**抽象语法树(AST)**准确识别表达式语句——Jupyter里那些自动输出结果的行,本质都是单纯的表达式语句(而非赋值、定义、控制流这类无返回输出的语句)。
核心思路
通过Python内置的ast模块解析每一行代码的语法结构,判断该行是否为ast.Expr类型的表达式语句,若是则将内容包裹进print();否则直接保留原行。
实现代码
import ast def jupyter_to_python(code_str): lines = code_str.split('\n') processed_lines = [] for line in lines: stripped = line.strip() # 跳过空行和单行注释 if not stripped or stripped.startswith('#'): processed_lines.append(line) continue try: # 解析当前行的语法树 tree = ast.parse(line) # 仅当这行是单个表达式语句时,添加print if len(tree.body) == 1 and isinstance(tree.body[0], ast.Expr): processed_lines.append(f"print({line})") else: processed_lines.append(line) except SyntaxError: # 解析失败(比如多行语句的一部分),直接保留原行 processed_lines.append(line) return '\n'.join(processed_lines)
测试示例
输入Jupyter代码:
import pandas as pd data = pd.read_csv("tmp.csv") data.head() data['value'].mean() x = 10 x * 2 # 这是注释
转换后的Python代码:
import pandas as pd data = pd.read_csv("tmp.csv") print(data.head()) print(data['value'].mean()) x = 10 print(x * 2) # 这是注释
注意事项
- 对于跨多行的表达式(比如括号拆分为多行的情况),单行解析会触发语法错误,此时会直接保留原行,这类场景可后续通过多行合并解析优化;
- Jupyter的魔法命令(比如
!ls、%matplotlib inline)不属于Python表达式,工具会直接保留,若需处理魔法命令可单独添加判断逻辑。
内容的提问来源于stack exchange,提问作者w57
相关产品推荐
相关产品推荐

