You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 14:52:55