从ipython-notebook转换为.py

2 投票
2 回答
1574 浏览
提问于 2025-04-18 05:12

我想把一个 ipython 笔记本文件下载成 .py 文件。这个过程基本上是顺利的,但生成的 .py 文件里夹杂着 "In: []" 的标记,出现在每个单元格的边界。我可以接受它们存在,但我更希望它们不出现。
有没有简单的方法可以解决这个问题?

示例输出(我在 .py 文件中看到的内容):

# In[4]:

# Get names of all files
text_files = glob.glob('hw3data/*')
#print text_files


# In[5]:

def file_contents(file_name):
    with open(file_name) as f:
        return f.read()

补充:我其实是在想,是否可以让笔记本本身不输出 #In[ ]。有没有命令行选项、工具,或者某种 %magic 命令?

补充:根据 https://github.com/ipython/ipython/issues/5780 的内容,似乎建议的解决方案是使用自定义模板。来自 minrk 的回复:

这只是一个标记,用来指示单元格的位置。这是设计使然,但对 Python 没有影响,因为它只是注释。如果你想去掉这些标记,可以使用一个不添加这些注释的自定义导出模板。

2 个回答

0

作为一个临时的解决办法,我发现如果把 nbconvert 的 Python 导出模板中的第七到第九行删掉(这个模板文件在 site-packagesipython/IPython/nbconvert/templates/python.tpl 路径下),就可以阻止输入提示符的输出。不过,这样做还是不太理想,因为我在修改系统包。

受影响的行:

{% block in_prompt %}
# In[{{ cell.prompt_number if cell.prompt_number else ' ' }}]:
{% endblock in_prompt %}
1

尝试一下

def rc(in_, out_):

    in_ = open(in_, 'r')
    out_ = open(out_,'w')
    out_.write(in_.readline())

    for line in in_:
        if not line.lstrip().startswith('# In['):
            out_.write(line)

    in_.close()
    out_.close()

rc('~/in_file.py', '~/out_file.py')

撰写回答