【问题标题】:convert json ipython notebook(.ipynb) to .py file将 json ipython notebook(.ipynb) 转换为 .py 文件
【发布时间】:2016-10-14 08:12:04
【问题描述】:

如何将 IPython 笔记本文件(带有 .ipynb 扩展名的 json)转换为常规的 .py 模块?

【问题讨论】:

标签: python jupyter-notebook ipython nbconvert


【解决方案1】:

根据https://ipython.org/ipython-doc/3/notebook/nbconvert.html,您正在寻找带有 --to 脚本选项的 nbconvert 命令。

ipython nbconvert notebook.ipynb --to script

【讨论】:

  • 现在收到此通知,仅供参考:[TerminalIPythonApp] WARNING | Subcommand 'ipython nbconvert' is deprecated and will be removed in future versions. [TerminalIPythonApp] WARNING | You likely want to use 'jupyter nbconvert' in the future
  • @Matt ipython 已重命名为 jupyter。该消息告诉您旧的可执行文件名称已被弃用。转换命令本身不是。
  • @Adam,我明白这一点。我想记录正确的可执行文件。
【解决方案2】:

从笔记本菜单中,您可以将文件直接保存为 python 脚本。转到菜单的“文件”选项,然后选择“下载为”,您会看到一个“Python (.py)”选项。

另一种选择是从命令行使用 nbconvert:

jupyter nbconvert --to script 'my-notebook.ipynb'

看看here

【讨论】:

  • 另一种调用 nbconvert 的方法是使用 jupyter_notebook_confg.py 文件在保存时自动执行此操作 -- 请参阅 stackoverflow.com/a/25765194/1653571
  • 我似乎没有安装 ipython 或 jupyter,所以我不知道如何进入笔记本菜单。
  • @DaveGoldsmith 运行pip install jupyter。安装后,转到您的项目目录并运行jupyter notebook。它应该会自动打开一个网络浏览器,否则打开一个并转到http://localhost:8888/notebooks/ 开始创建或使用笔记本。
  • 有没有办法让我也可以在 a.py 文件中获取输出文本
【解决方案3】:

简而言之:此命令行选项将mynotebook.ipynb 转换为python 代码:

jupyter nbconvert mynotebook.ipynb --to python

注意:这与above 答案不同。 ipython 已重命名为 jupyter。旧的可执行文件名称 (ipython) 已弃用。


更多详情: jupyter 命令行有一个 nbconvert 参数,可帮助将笔记本文件 (*.ipynb) 转换为各种其他格式。

您甚至可以使用相同的命令但不同的--to 选项将其转换为这些格式中的任何一种:

  • asciidoc
  • 自定义
  • html
  • 乳胶。 (如果您想在会议/期刊论文中粘贴代码,那就太棒了)。
  • 降价
  • 笔记本
  • pdf
  • 蟒蛇
  • 第一
  • 脚本
  • 幻灯片。 (哇哦!转换为幻灯片以便于演示?)

同样的命令jupyter nbconvert --to latex mynotebook.ipynb

更多信息请参见jupyter nbconvert --help。这有很多选择。您甚至可以在转换之前先执行代码,不同的日志级别选项等。

【讨论】:

    【解决方案4】:

    您可以使用以下脚本将jupyter notebook转换为Python脚本,或者直接查看代码。

    为此,将以下内容写入文件cat_ipynb,然后写入chmod +x cat_ipynb

    #!/usr/bin/env python
    import sys
    import json
    
    for file in sys.argv[1:]:
        print('# file: %s' % file)
        print('# vi: filetype=python')
        print('')
        code = json.load(open(file))
    
        for cell in code['cells']:
            if cell['cell_type'] == 'code':
                print('# -------- code --------')
                for line in cell['source']:
                    print(line, end='')
                print('\n')
            elif cell['cell_type'] == 'markdown':
                print('# -------- markdown --------')
                for line in cell['source']:
                    print("#", line, end='')
                print('\n')
    

    然后就可以使用了

    cat_ipynb your_notebook.ipynb > output.py

    或者直接用vi显示

    cat_ipynb your_notebook.ipynb | view -

    【讨论】:

      【解决方案5】:

      首先你需要在下面安装这个包:

      sudo apt install ipython
      jupyter nbconvert --to script [YOUR_NOTEBOOK].ipynb
      

      两个选项可用 --to python 或 --to=python 我的就像这样工作正常: jupyter nbconvert --to python while.ipynb

      jupyter nbconvert --to python while.ipynb 
      

      [NbConvertApp] 将笔记本 while.ipynb 转换为 python [NbConvertApp] 将 758 字节写入 while.py

      pip3 install ipython
      

      如果它不适合你尝试,通过 pip3。

      pip3 install ipython
      

      【讨论】:

        【解决方案6】:
        1. 转到https://jupyter.org/
        2. 点击nbviewer
        3. 输入文件的位置并进行渲染。
        4. 点击以代码形式查看(显示为)

        【讨论】:

        • 请详细说明步骤 3 和 4。
        • @JJJ 链接里有详细说明。例如,对于 3,我将 jupyter notebook 放在 Git 存储库中,然后在 git 上输入文件的链接。对于 4,打开笔记本后,在右上角,您会发现几个图标。上面带有 > 的图标是“查看代码”图标。希望这可以澄清。
        【解决方案7】:

        您绝对可以使用以下命令通过 nbconvert 实现此目的:

        jupyter nbconvert --to python while.ipynb 
        

        但是,由于个人使用它,我建议不要使用它,原因如下:

        1. 能够转换为简单的 Python 代码是一回事,而设置所有正确的抽象、类访问和方法则是另一回事。如果您将笔记本代码转换为 Python 的全部目的是达到您的代码和笔记本可以长期维护的状态,那么仅 nbconvert 是不够的。唯一的方法是手动浏览代码库。
        2. 笔记本天生就提倡编写不可维护的代码 (https://docs.google.com/presentation/d/1n2RlMdmv1p25Xy5thJUhkKGvjtV-dkAIsUXP-AL4ffI/edit#slide=id.g3d7fe085e7_0_21)。在顶部使用 nbconvert 可能只是被证明是一个创可贴。它促进不易维护的代码的具体示例是,可能会在整个过程中喷洒导入,硬编码路径不在一个易于查看的地方,可能不存在类抽象等。
        3. nbconvert 仍然混合执行代码和库代码。
        4. 评论仍然不存在(可能不在笔记本中)。
        5. 仍然缺乏单元测试等。

        总而言之,开箱即用地将 python notebook 转换为可维护、健壮的 python 模块化代码并没有很好的方法,唯一的方法是手动进行手术。

        【讨论】:

          【解决方案8】:

          Jupytext 允许在命令行上进行这种转换,并且重要的是,您可以再次从脚本返回到笔记本(甚至是已执行的笔记本)。见here

          【讨论】:

            【解决方案9】:

            复制Desired文件夹中的所有(''.ipynb)文件然后执行:

            import os    
            
            desired_path = 'C:\\Users\\Docs\\Ipynb Covertor'
            
            os.chdir(desired_path)
            
            list_of_directory = os.listdir(desired_path)
            
            for file in list_of_directory:
                    os.system('ipython nbconvert --to script ' + str(file))
            

            【讨论】:

              【解决方案10】:

              一种方法是在 Colab 上上传您的脚本,然后从 File -> Download .py 以 .py 格式下载它

              【讨论】:

                【解决方案11】:

                你可以用它来做到这一点:

                pip install ipynb-py-convert
                

                然后在您的终端上运行它以将 .py 文件转换为 .ipynb :

                ipynb-py-convert Ex/abc.py Ex/abc.ipynb
                

                将 .ipynb 文件转换为 .py :

                ipynb-py-convert Ex/abc.ipynb Ex/abc.py
                

                【讨论】:

                  【解决方案12】:

                  您可以在同一目录中运行 .py 文件:

                  import json
                  
                  files = ["my_first_file_name.ipynb", "my_second_file_name.ipynb"]
                  
                  for file in files:
                      code = json.load(open(file))
                      py_file = open(f"{file}.py", "w+")
                  
                      for cell in code['cells']:
                          if cell['cell_type'] == 'code':
                              for line in cell['source']:
                                  py_file.write(line)
                              py_file.write("\n")
                          elif cell['cell_type'] == 'markdown':
                              py_file.write("\n")
                              for line in cell['source']:
                                  if line and line[0] == "#":
                                      py_file.write(line)
                              py_file.write("\n")
                  
                      py_file.close()
                  

                  我根据 Syrtis Major 的回答重写了这段代码。

                  【讨论】:

                  • 最佳答案。不需要jupyter nbconvert,只需使用标准的 json 格式来获取笔记本。绝对精彩!
                  【解决方案13】:

                  将 Ipynb 目录文件转换为 .py

                  import os
                  
                  for fname in os.listdir():
                      if fname.endswith('ipynb'):
                          os.system(f'jupyter nbconvert {fname} --to python')
                  

                  【讨论】:

                    【解决方案14】:

                    测试于 Ubuntu 20.04

                    安装 PIP 所需的软件包

                    $ pip install ipython
                    $ pip install nbconvert
                    

                    安装所需的包

                    $ sudo apt-get install texlive-xetex texlive-fonts-recommended texlive-plain-generic
                    

                    方法一

                    使用jupyter nbconvert命令转换成不同的格式

                    源文件 pro.ipynb

                    • 转换为ascii

                      $ jupyter nbconvert --to asciidoc pro.ipynb
                      
                    • 转换为pdf

                      $ jupyter nbconvert --to pdf pro.ipynb
                      
                    • 转换为python

                      $ jupyter nbconvert --to python pro.ipynb
                      

                    方法 2

                    使用pyplotsavefig方法通过python代码转换ipynb项目:

                    pro.ipynb

                    import matplotlib.pyplot as plt
                    %matplotlib inline
                    exp_vals=[1400,600,300,410,250]
                    exp_labels=['Home Rent','Food','Phone/Internet Bill','Car','Other Utilities']
                    plt.axis('equal')
                    plt.pie(exp_vals,labels=exp_labels,radius=2,autopct='%0.1f%%',shadow=True,explode=[0,0.5,0,0.3,0],startangle=20)
                    # plt.show()
                    plt.savefig('piechart.jpg',bbox_inches='tight',pad_inches=2,transparent=True,edgecolor='r')
                    

                    它生成的piechart.png图像:

                       Hope this helps to convert your ~(`)/\/\/\_ [Python] code
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2022-06-26
                      • 2014-06-19
                      • 1970-01-01
                      • 2021-03-22
                      • 1970-01-01
                      • 2015-09-02
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多