我正在考虑使用*。Ipynb文件作为真相的来源,并以编程方式将它们“编译”为.py文件,用于计划的作业/任务。
我所理解的做到这一点的唯一方法是通过GUI。有没有办法通过命令行来实现?
我正在考虑使用*。Ipynb文件作为真相的来源,并以编程方式将它们“编译”为.py文件,用于计划的作业/任务。
我所理解的做到这一点的唯一方法是通过GUI。有没有办法通过命令行来实现?
当前回答
我发现有两种方法可以用命令行将Jupyter Notebook转换为普通的Python脚本。下面是Jupyter笔记本的示例和两个工具的输出。
1. 使用nbconvert
nbconvert是在Jupyter Notebook用户界面下载中作为功能使用的工具。它可以用作命令行工具:
jupyter nbconvert --to python notebook.ipynb
Python脚本示例:
2. 使用jupytext
jupytext是一个保持.ipynb文件与.py文件同步的包。它还可以用于在命令行中转换.ipynb文件。它支持几种类型的转换:
转换为轻格式的Python脚本
jupytext --to py notebook.ipynb
python脚本示例:
转换为百分比格式的Python脚本
jupytext --to py:percent notebook.ipynb
Python脚本示例:
其他回答
使用nbconvert 6.07和jupyter client 6.1.12:
转换jupyter笔记本到python脚本
$ jupyter nbconvert mynotebook.ipynb --to python
转换jupyter笔记本到python脚本指定输出文件名
$ jupyter nbconvert mynotebook.ipnb --to python --output myscript.py
下面是一种不使用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()
用于转换所有*。Ipynb将当前目录下的文件递归格式化为python脚本:
for i in *.ipynb **/*.ipynb; do
echo "$i"
jupyter nbconvert "$i" "$i"
done
我发现有两种方法可以用命令行将Jupyter Notebook转换为普通的Python脚本。下面是Jupyter笔记本的示例和两个工具的输出。
1. 使用nbconvert
nbconvert是在Jupyter Notebook用户界面下载中作为功能使用的工具。它可以用作命令行工具:
jupyter nbconvert --to python notebook.ipynb
Python脚本示例:
2. 使用jupytext
jupytext是一个保持.ipynb文件与.py文件同步的包。它还可以用于在命令行中转换.ipynb文件。它支持几种类型的转换:
转换为轻格式的Python脚本
jupytext --to py notebook.ipynb
python脚本示例:
转换为百分比格式的Python脚本
jupytext --to py:percent notebook.ipynb
Python脚本示例:
遵循前面的例子,但是使用了新的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'))