【问题标题】:How to Download from Jupyter Notebook without Extra Comments如何在没有额外注释的情况下从 Jupyter Notebook 下载
【发布时间】:2019-04-03 06:36:52
【问题描述】:

抱歉,如果它已经被问过,或者解决方案很简单。

使用 Jupyter Notebook 编写 Python 脚本。当我将笔记本下载为 .py 文件时(通过单击 File->Download as->Python (.py)),Jupyter 添加了一堆无关的注释行。它添加了一些解释器shebang,在开头编码声明,然后为每个单元格添加#In[], #Out[]等。为了使事情更麻烦,shebang看起来像

#!/usr/bin/env python

即使我使用的是 python3 内核。

虽然我确信它有最好的意图,但我经常希望拥有自己的解释器指令并完全跳过其他注释行,因为它们只会增加混乱。

如何仅下载原始代码,仅使用 I 插入的 cmets,以及仅由换行符分隔的单元格?另外,我想知道一个永久的解决方案来更改配置以这种方式下载它,对于我机器上的所有 ipynb 文件,而不是一次性命令。

【问题讨论】:

    标签: python-3.x jupyter-notebook comments shebang


    【解决方案1】:

    你可以使用这个命令:

    jupyter nbconvert --to python "path/to/notebook.ipynb" \
    --TemplateExporter.exclude_markdown=True \
    --TemplateExporter.exclude_output_prompt=True \
    --TemplateExporter.exclude_input_prompt=True
    

    它将生成一个仅包含您的 Python 代码且不包含 #In[], #Out[] 的 Python 文件

    命令中的\只是把命令写成多行,可以去掉。

    永久配置

    要使此配置永久化:

    1. 在目录~/.jupyter/ 内创建一个名为jupyter_nbconvert_config.py 的文件。如果目录不存在,请创建目录。

    2. 在文件中写入:

      from nbconvert import TemplateExporter
      TemplateExporter.exclude_markdown=True 
      TemplateExporter.exclude_output_prompt=True
      TemplateExporter.exclude_input_prompt=True
      
    3. 现在你可以运行命令了:

      jupyter nbconvert --to python "path/to/notebook.ipynb"
      

      获取仅包含代码的 Python 文件。

    来源: 12

    【讨论】:

    • 我通过点击 File->Download as->Python (.py) 获取源代码。您编写的命令(在当前工作目录的终端中运行时)是否为我下载了它?或者它是否为将来的下载设置了配置?
    • 是的。此命令实际上将您的笔记本下载为仅包含代码内容的 Python 文件。它不会设置任何永久配置。
    • 如果它解决了您的问题,请考虑将答案标记为正确@Della
    • 谢谢。虽然这很有用,但我正在寻找更像是一种配置设置以使其永久化。
    • 谢谢。很抱歉我很迂腐,但同样,由于该命令包含笔记本的路径,解决方案是否仅适用于特定笔记本或 PC 上的所有笔记本?另外,我是否必须每次都使用该命令进行转换,还是可以通过 GUI 使用我的旧方法?最后,我试了一下,它没有完全工作。它正在删除输入输出提示,但不是顶部的 shebang 和编码声明。此外,shebang 是错误的。
    【解决方案2】:

    响应较晚,但您可以直接更改 python.tpl 文件,该文件引用 Jupyter Notebook 在创建 python 文件时使用的模板。

    1. 找到您的python.tpl 文件。我的位于:C:\Anaconda3\envs\<my_env_name>\Lib\site-packages\nbconvert\templates,其中<my_env_name> 只是我创建的环境的名称。我刚刚在'nbconvert\templates' 上进行了 Windows 搜索以找到该目录。
    2. 通过将原始python.tpl 文件复制并粘贴到某处来备份它。我刚刚在上面的同一目录中创建了一个original_templates 文件夹。
    3. 编辑python.tpl 文件(不是您为备份而复制的文件),对模板进行所需的更改。 如果你只想要没有 headers/cmets 的代码块,下面是我使用的基本结构:
    {%- extends 'null.tpl' -%} 
    {% block input %} 
    {{ cell.source | ipython2python }} 
    {% endblock input %}
    
    1. 保存更改。

    现在,在这个环境中,所有未来作为 python 文件下载的应该只是没有额外 cmets 的代码。

    有关自定义模板的更多详细信息,请尝试参考 nbconvert 文档:https://nbconvert.readthedocs.io/en/latest/customizing.html

    注意:我在环境中编辑了模板文件,所以如果我在 anaconda 中切换环境,我还需要对其他环境中的模板文件进行相同的更改。

    【讨论】:

      【解决方案3】:

      不完全是一个修复,但你知道它是怎么回事,有时你只需要完成工作。

      我用

      下载了我的笔记本
      jupyter nbconvert --to python my/path/notebook.ipynb
      

      然后,我只是用 Sublime Text 打开它。

      之后,只需要删除所有单元格引用,例如: '# In[22]:' 在脚本中。使用 Sublime Text 中的查找和替换,您可以选择 RegEx,并且:

      (# In\W[0-9]+\W:)+
      

      会解决的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-16
        • 1970-01-01
        • 2019-11-26
        • 1970-01-01
        • 1970-01-01
        • 2021-09-28
        • 1970-01-01
        • 2023-03-09
        相关资源
        最近更新 更多