将 JSON IPython 笔记本 (.ipynb) 转换为 .py 文件
Convert JSON IPython notebook (.ipynb) to .py file
如何将 IPython 笔记本文件(json 扩展名为 .ipynb
)转换为常规 .py
模块?
根据 https://ipython.org/ipython-doc/3/notebook/nbconvert.html,您正在寻找带有 --to 脚本选项的 nbconvert 命令。
ipython nbconvert notebook.ipynb --to script
从笔记本菜单中,您可以将文件直接保存为 python 脚本。转到菜单的 'File' 选项,然后 select 'Download as' 在那里你会看到 'Python (.py)' 选项。
另一种选择是从命令行使用 nbconvert:
jupyter nbconvert --to script 'my-notebook.ipynb'
看看here.
简而言之: 此命令行选项将 mynotebook.ipynb
转换为 python
代码:
jupyter nbconvert mynotebook.ipynb --to python
注意: 这与 答案不同。 ipython
已重命名为 jupyter
。旧的可执行文件名称 (ipython) 已弃用。
更多详情:
jupyter
命令行有一个 nbconvert
参数,可帮助将笔记本文件 (*.ipynb)
转换为各种其他格式。
您甚至可以使用相同的命令但不同的 --to
选项将其转换为这些格式中的任何一种:
- asciidoc
- 自定义
- html
- 乳胶。 (如果您想在 conference/journal 论文中粘贴代码,那就太棒了)。
- 降价
- 笔记本
- pdf
- python
- 第一
- 脚本
- 幻灯片。 (哇!转换为幻灯片以便于演示)
同样的命令jupyter nbconvert --to latex mynotebook.ipynb
有关更多信息,请参阅 jupyter nbconvert --help
。对此有广泛的选择。您甚至可以在转换之前先执行代码,不同的日志级别选项等。
您可以使用以下脚本将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 -
首先你需要安装下面这个包:
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
- 转到https://jupyter.org/
- 点击 nbviewer
- 输入文件的位置并渲染它。
- 点击查看代码(显示为 < />)
您绝对可以使用以下命令通过 nbconvert 实现这一点:
jupyter nbconvert --to python while.ipynb
但是,我个人使用过它,出于以下几个原因我不建议使用它:
- 能够转换为简单的 Python 代码是一回事,拥有所有正确的抽象、classes 访问和方法设置是另一回事。如果将 notebook 代码转换为 Python 的全部目的是让代码和笔记本可以长期维护 运行,那么仅靠 nbconvert 是不够的。唯一的方法是手动浏览代码库。
- 笔记本天生提倡编写不可维护的代码 (https://docs.google.com/presentation/d/1n2RlMdmv1p25Xy5thJUhkKGvjtV-dkAIsUXP-AL4ffI/edit#slide=id.g3d7fe085e7_0_21)。在顶部使用 nbconvert 可能只是一个创可贴。它促进不那么可维护的代码的具体例子是导入可能会贯穿始终,硬编码路径不在一个简单的地方查看,class 抽象可能不存在,等等。
- nbconvert 仍然混合执行代码和库代码。
- 评论仍然不存在(可能不在笔记本中)。
- 还缺少单元测试等
总而言之,没有很好的方法可以开箱即用地将 python notebooks 转换为可维护、健壮的 python 模块化代码,唯一的方法是手动进行手术。
Jupytext 允许在命令行上进行此类转换,重要的是,您可以从脚本再次返回到笔记本(甚至是已执行的笔记本)。参见 here。
复制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))
一种方法是在 Colab 上上传您的脚本,然后从 File -> Download .py
下载 .py 格式的脚本
你可以用这个来做那个:
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
您可以运行同一目录下的 .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 的回答重写了这段代码。
将 Ipynb 目录文件转换为 .py
import os
for fname in os.listdir():
if fname.endswith('ipynb'):
os.system(f'jupyter nbconvert {fname} --to python')
测试于 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
方法二
通过python代码使用savefig method of pyplot:
转换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
如果这是 one-off,请遵循例如@kikocorreoso 取决于你是想使用命令行还是 gui。
但是,如果您想要一些能够维护 .py 和 .ipynb 同步版本的解决方案,您真的应该考虑使用 jupytext,正如@Wayne
所指出的那样
运行 conda install jupytext
或 pip install jupytext
然后做:
jupytext --set-formats ipynb,py <file>.ipynb
要使其与 .py 文件保持同步:
jupytext --set-formats ipynb,py <file>.ipynb --sync
这将确保 jupyter 从现在开始保存时保持两个文件同步...
最后说明:如果你是 gui 用户,在 运行 jupytext 安装命令之后,其他一切也可以从 gui 完成 File-->Jupytext-->pair Notebook with light Script
:
如何将 IPython 笔记本文件(json 扩展名为 .ipynb
)转换为常规 .py
模块?
根据 https://ipython.org/ipython-doc/3/notebook/nbconvert.html,您正在寻找带有 --to 脚本选项的 nbconvert 命令。
ipython nbconvert notebook.ipynb --to script
从笔记本菜单中,您可以将文件直接保存为 python 脚本。转到菜单的 'File' 选项,然后 select 'Download as' 在那里你会看到 'Python (.py)' 选项。
另一种选择是从命令行使用 nbconvert:
jupyter nbconvert --to script 'my-notebook.ipynb'
看看here.
简而言之: 此命令行选项将 mynotebook.ipynb
转换为 python
代码:
jupyter nbconvert mynotebook.ipynb --to python
注意: 这与 ipython
已重命名为 jupyter
。旧的可执行文件名称 (ipython) 已弃用。
更多详情:
jupyter
命令行有一个 nbconvert
参数,可帮助将笔记本文件 (*.ipynb)
转换为各种其他格式。
您甚至可以使用相同的命令但不同的 --to
选项将其转换为这些格式中的任何一种:
- asciidoc
- 自定义
- html
- 乳胶。 (如果您想在 conference/journal 论文中粘贴代码,那就太棒了)。
- 降价
- 笔记本
- python
- 第一
- 脚本
- 幻灯片。 (哇!转换为幻灯片以便于演示)
同样的命令jupyter nbconvert --to latex mynotebook.ipynb
有关更多信息,请参阅 jupyter nbconvert --help
。对此有广泛的选择。您甚至可以在转换之前先执行代码,不同的日志级别选项等。
您可以使用以下脚本将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 -
首先你需要安装下面这个包:
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
- 转到https://jupyter.org/
- 点击 nbviewer
- 输入文件的位置并渲染它。
- 点击查看代码(显示为 < />)
您绝对可以使用以下命令通过 nbconvert 实现这一点:
jupyter nbconvert --to python while.ipynb
但是,我个人使用过它,出于以下几个原因我不建议使用它:
- 能够转换为简单的 Python 代码是一回事,拥有所有正确的抽象、classes 访问和方法设置是另一回事。如果将 notebook 代码转换为 Python 的全部目的是让代码和笔记本可以长期维护 运行,那么仅靠 nbconvert 是不够的。唯一的方法是手动浏览代码库。
- 笔记本天生提倡编写不可维护的代码 (https://docs.google.com/presentation/d/1n2RlMdmv1p25Xy5thJUhkKGvjtV-dkAIsUXP-AL4ffI/edit#slide=id.g3d7fe085e7_0_21)。在顶部使用 nbconvert 可能只是一个创可贴。它促进不那么可维护的代码的具体例子是导入可能会贯穿始终,硬编码路径不在一个简单的地方查看,class 抽象可能不存在,等等。
- nbconvert 仍然混合执行代码和库代码。
- 评论仍然不存在(可能不在笔记本中)。
- 还缺少单元测试等
总而言之,没有很好的方法可以开箱即用地将 python notebooks 转换为可维护、健壮的 python 模块化代码,唯一的方法是手动进行手术。
Jupytext 允许在命令行上进行此类转换,重要的是,您可以从脚本再次返回到笔记本(甚至是已执行的笔记本)。参见 here。
复制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))
一种方法是在 Colab 上上传您的脚本,然后从 File -> Download .py
你可以用这个来做那个:
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
您可以运行同一目录下的 .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 的回答重写了这段代码。
将 Ipynb 目录文件转换为 .py
import os
for fname in os.listdir():
if fname.endswith('ipynb'):
os.system(f'jupyter nbconvert {fname} --to python')
测试于 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
方法二
通过python代码使用savefig method of pyplot:
转换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
如果这是 one-off,请遵循例如@kikocorreoso 取决于你是想使用命令行还是 gui。
但是,如果您想要一些能够维护 .py 和 .ipynb 同步版本的解决方案,您真的应该考虑使用 jupytext,正如@Wayne
所指出的那样运行 conda install jupytext
或 pip install jupytext
然后做:
jupytext --set-formats ipynb,py <file>.ipynb
要使其与 .py 文件保持同步:
jupytext --set-formats ipynb,py <file>.ipynb --sync
这将确保 jupyter 从现在开始保存时保持两个文件同步...
最后说明:如果你是 gui 用户,在 运行 jupytext 安装命令之后,其他一切也可以从 gui 完成 File-->Jupytext-->pair Notebook with light Script
: