如何通过命令行将IPython Notebook转换为Python文件?

Ste*_*zyk 218 ipython ipython-notebook

我正在考虑使用*.ipynb文件作为事实的来源,并以编程方式将它们"编译"成.py文件以用于预定的作业/任务.

我理解这样做的唯一方法是通过GUI.有没有办法通过命令行来做?

www*_*iam 359

如果您不想在每次保存时输出Python脚本,或者您不想重新启动IPython内核:

命令行中,您可以使用nbconvert:

$ jupyter nbconvert --to script [YOUR_NOTEBOOK].ipynb
Run Code Online (Sandbox Code Playgroud)

作为一个黑客,您甚至可以通过预挂起!(用于任何命令行参数) IPython笔记本中调用上述命令.在笔记本内:

!jupyter nbconvert --to script config_template.ipynb
Run Code Online (Sandbox Code Playgroud)

之前--to script加入,可以选择是--to python--to=python,但它改名朝一个语言无关的笔记本电脑系统的举动.

  • 如果你想要每次保存,你可以在`jupyter`中通过保存前或保存后挂钩触发`nbconvert`:`ContentsManager.pre_save_hook` abd`FileContentsManager.post_save_hook`.你会添加一个post-save hook`jupyter nbconvert --to script [notebook]` (8认同)
  • 谢谢,它的工作原理!但是如果我不想在脚本中输入`#In []:`类型的内容,我希望它是干净的.有没有办法做到这一点? (8认同)
  • @RishabhAgrahari 以下似乎对我有用。`!jupyter nbconvert --to script --no-prompt notebook.ipynb` (4认同)
  • 有没有办法做反向,即从python脚本转换为笔记本.对于ex - 有一些专门的文档字符串被解析成单元格? (3认同)
  • 将所有笔记本转换为文件夹`jupyter nbconvert --to script/path/to/notebooks/*.ipynb` (3认同)

Bře*_*jek 61

如果要将*.ipynb当前目录中的所有文件转换为python脚本,可以运行如下命令:

jupyter nbconvert --to script *.ipynb
Run Code Online (Sandbox Code Playgroud)


Val*_*tas 18

这是一种快速而肮脏的方法,可以在不使用ipython的情况下从V3或V4 ipynb中提取代码.它不检查细胞类型等.

import sys,json

f = open(sys.argv[1], 'r') #input.ipynb
j = json.load(f)
of = open(sys.argv[2], 'w') #output.py
if j["nbformat"] >=4:
        for i,cell in enumerate(j["cells"]):
                of.write("#cell "+str(i)+"\n")
                for line in cell["source"]:
                        of.write(line)
                of.write('\n\n')
else:
        for i,cell in enumerate(j["worksheets"][0]["cells"]):
                of.write("#cell "+str(i)+"\n")
                for line in cell["input"]:
                        of.write(line)
                of.write('\n\n')

of.close()
Run Code Online (Sandbox Code Playgroud)

  • 如果您不想安装任何 Jupyter 工具,这是最佳答案。 (6认同)
  • 我喜欢这个。但我发现当我从 Jupyter 笔记本下载 .py 格式时,即使我在 Windows 上,它也使用 UNIX 行结尾。要生成相同的内容,请在打开输出文件调用中添加 `newlines='\n'` 作为第三个参数。(Python 3.x) (2认同)

Spa*_*der 15

按照前面的示例,但使用新的nbformat lib版本:

import nbformat
from nbconvert import PythonExporter

def convertNotebook(notebookPath, modulePath):

  with open(notebookPath) as fh:
    nb = nbformat.reads(fh.read(), nbformat.NO_CONVERT)

  exporter = PythonExporter()
  source, meta = exporter.from_notebook_node(nb)

  with open(modulePath, 'w+') as fh:
    fh.writelines(source.encode('utf-8'))
Run Code Online (Sandbox Code Playgroud)


Way*_*yne 14

Jupytext非常适合在您的工具链中进行此类转换。它不仅允许从笔记本转换为脚本,而且您还可以再次从脚本返回到笔记本。甚至以执行形式制作该笔记本。

jupytext --to py notebook.ipynb                 # convert notebook.ipynb to a .py file
jupytext --to notebook notebook.py              # convert notebook.py to an .ipynb file with no outputs
jupytext --to notebook --execute notebook.py    # convert notebook.py to an .ipynb file and run it 
Run Code Online (Sandbox Code Playgroud)


小智 8

@ Spawnrider的最后一行代码,

fh.writelines(source.encode('utf-8'))
Run Code Online (Sandbox Code Playgroud)

给'TypeError:write()参数必须是str,而不是int'

fh.writelines(source) 
Run Code Online (Sandbox Code Playgroud)

虽然工作.


jus*_*anr 6

您可以从IPython API执行此操作.

from IPython.nbformat import current as nbformat
from IPython.nbconvert import PythonExporter

filepath = 'path/to/my_notebook.ipynb'
export_path = 'path/to/my_notebook.py'

with open(filepath) as fh:
    nb = nbformat.reads_json(fh.read())

exporter = PythonExporter()

# source is a tuple of python source code
# meta contains metadata
source, meta = exporter.from_notebook_node(nb)

with open(export_path, 'w+') as fh:
    fh.writelines(source)
Run Code Online (Sandbox Code Playgroud)


yaa*_*ach 6

使用 nbconvert 6.07 和 jupyter 客户端 6.1.12:

将 jupyter 笔记本转换为 python 脚本

$ jupyter nbconvert mynotebook.ipynb --to python
Run Code Online (Sandbox Code Playgroud)

将 jupyter 笔记本转换为指定输出文件名的 python 脚本

$ jupyter nbconvert mynotebook.ipnb --to python --output myscript.py
Run Code Online (Sandbox Code Playgroud)


Don*_*the 5

将当前目录中的所有 *.ipynb 格式文件递归转换为 python 脚本:

for i in *.ipynb **/*.ipynb; do 
    echo "$i"
    jupyter nbconvert  "$i" "$i"
done
Run Code Online (Sandbox Code Playgroud)

  • 我不得不添加 `--to script` 参数来避免 Jupiter 4.4.0 中的默认 HTML 输出。 (4认同)

小智 5

我知道这是一个旧线程。我遇到了同样的问题,想通过命令行将 .pynb 文件转换为 .py 文件。

我的搜索将我带到了ipynb-py-convert

通过以下步骤,我能够获得 .py 文件

  1. 安装“pip install ipynb-py-convert”
  2. 通过命令提示符进入ipynb文件所在目录
  3. 输入命令

> ipynb-py-convert YourFileName.ipynb YourFilename.py

例如:。ipynb-py-convert 入门与kaggle-titanic-problem.ipynb 入门与kaggle-titanic-problem.py

上面的命令将创建一个名为“YourFileName.py”的 python 脚本,根据我们的示例,它将创建getting-started-with-kaggle-titanic-problem.py文件