我正在考虑使用*。Ipynb文件作为真相的来源,并以编程方式将它们“编译”为.py文件,用于计划的作业/任务。
我所理解的做到这一点的唯一方法是通过GUI。有没有办法通过命令行来实现?
我正在考虑使用*。Ipynb文件作为真相的来源,并以编程方式将它们“编译”为.py文件,用于计划的作业/任务。
我所理解的做到这一点的唯一方法是通过GUI。有没有办法通过命令行来实现?
当前回答
我已经构建了一个函数来实现这一点。用户不需要安装任何东西就可以使用它。
#!/usr/bin/python
# A short routine to convert a Jupyter Notebook to a Python file
import json
def ipynb_to_py(input_ipynb_file,output_py_file=None):
"""
Generate a Python script (.py) that includes all source code from the input Jupyter notebook (.ipynb).
The user can input a Jupyter Notebook file from the current working directory or from a path.
If the name for output Python file is not specified,
the output file name will copy the file name of the input Jupyter Notebook,
but the file exention will be changed from ".ipynb" chanegd to ".py".
And the output Python file will be saved at the same directory of the input Jupyter Notebook.
For example:
ipynb_to_py("test-jupyternotebook.ipynb")
ipynb_to_py("./test-input-dir/test-jupyternotebook.ipynb")
The user can also specify an output file name that ends with ".py".
If the output file name is provided, but no path to output file is added,
the file will be saved at the current working directory.
For example:
ipynb_to_py("test-jupyternotebook.ipynb","test1.py")
ipynb_to_py("./test-input-dir/test-jupyternotebook.ipynb","test2.py")
The user can save out the file at a target directory by adding a path to the output file.
For example:
ipynb_to_py("test-jupyternotebook.ipynb","./test-outputdir/test3.py")
ipynb_to_py("./test-input-dir/test-jupyternotebook.ipynb","./test-output-dir/test4.py")
This function does not edit or delete the original input Jupyter Notebook file.
Args:
-----
input_ipynb_file: The file name string for the Jupyter Notebook (ends with ".ipynb")
output_py_file (optional): The file name for Python file to be created (ends with ".py").
Returns:
--------
A Python file containing all source code in the Jupyter Notebook.
Example usages:
---------------
ipynb_to_py("test-jupyternotebook.ipynb")
ipynb_to_py("./test-input-dir/test-jupyternotebook.ipynb")
ipynb_to_py("test-jupyternotebook.ipynb","test1.py")
ipynb_to_py("test-jupyternotebook.ipynb","./test-outputdir/test2.py")
ipynb_to_py("test-jupyternotebook.ipynb","./test-outputdir/test3.py")
ipynb_to_py("./test-input-dir/test-jupyternotebook.ipynb","./test-output-dir/test4.py")
"""
# Check if the input file is a Jupyter Notebook
if input_ipynb_file.endswith(".ipynb"):
# Open the input Jupyter Notebook file
notebook = open(input_ipynb_file)
# Read its content in the json format
notebook_content = json.load(notebook)
# Only extract the source code snippet from each cell in the input Jupyter Notebook
source_code_snippets = [cell['source'] for cell in notebook_content['cells']]
# If the name for output Python file is not specified,
# The name of input Jupyter Notebook will be used after changing ".ipynb" to ".py".
if output_py_file == None:
output_py_file = input_ipynb_file.split('.ipynb')[0]+".py"
else:
pass
# Create a Python script to save out all the extracted source code snippets
output_file = open(output_py_file,'w')
# Print out each line in each source code snippet to the output file
for snippet in source_code_snippets:
for line in snippet:
# Use end='' to avoid creating unwanted gaps between lines
print(line,end = '',file = output_file)
# At end of each snippet, move to the next line before printing the next one
print('',sep = '\n',file=output_file)
# Close the output file
output_file.close()
print("The path to output file:",output_py_file)
else:
print("The input file must be a Jupyter Notebook (in .ipynb format)!")
def main():
pass
if __name__ == "__main__":
main()
其他回答
您可以从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)
有一个非常好的包叫做nb_dev,它是为在Jupyter notebook中编写Python包而设计的。与nbconvert一样,它可以将笔记本转换为.py文件,但它更灵活、更强大,因为它有许多不错的额外创作功能,可以帮助您在PyPI上开发测试、文档和注册包。它是快速发展起来的。人工智能的人。
它有一点学习曲线,但文档很好,总体上不难。
我知道这是一个老话题了。我也遇到过同样的问题,想通过命令行将.pynb文件转换为.py文件。
我的搜索把我带到了ipynb-py-convert
通过以下步骤,我能够得到.py文件
安装pip Install ipynb-py-convert 通过命令提示符进入ipynb文件所在目录 输入命令
ipynb-py-convert你的文件名。ipynb YourFilename.py
如:。ipynb-py-convert getting-started-with-kaggle-titanic-problem。ipynb getting-started-with-kaggle-titanic-problem.py
上面的命令将创建一个名为“YourFileName.py”的python脚本,根据我们的示例,它将创建一个“getting-start -with-kaggle-titanic-problem.py”文件
我发现有两种方法可以用命令行将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