[英]Get only the code out of Jupyter Notebook
有沒有辦法把notebook的代碼全部拉出來? 例如,如果我想生成我的筆記本“source.py”的源文件,其中包含筆記本代碼單元格中的所有代碼,這可能嗎?
謝謝!
您可以使用命令行工具nbconvert將 ipynb 文件轉換為各種其他格式。 將其轉換為 .py 文件的最簡單方法是:
jupyter nbconvert --no-prompt --to script notebook_name.ipynb
它只輸出代碼和注釋,沒有markdown、輸入和輸出提示。 還有--stdout
選項。
但您也可以使用jq解析筆記本的 JSON:
jq -j '
.cells
| map( select(.cell_type == "code") | .source + ["\n\n"] )
| .[][]
' \
notebook.ipynb > source.py
您可以執行File -> Download as -> Python (.py)
— 這應該將所有代碼單元導出為單個.py
文件
有一個“丑陋”的解決方案。 選擇筆記本的所有單元格。 合並它們,然后只需復制並粘貼所有代碼。
由於筆記本格式是 JSON,因此僅提取代碼單元格的文本內容相對容易。 當您使用Python API 處理筆記本文件時,這項任務變得更加容易。
以下內容將為您提供標准輸出上的代碼。 您可以通過類似的其他方式輕松處理它。 請記住,代碼源可能沒有終止換行符。
from nbformat import read, NO_CONVERT
with open("Some Notebook.ipynb") as fp:
notebook = read(fp, NO_CONVERT)
cells = notebook['cells']
code_cells = [c for c in cells if c['cell_type'] == 'code']
for cell in code_cells:
print(cell['source'])
不過,筆記本節點比字典更靈活,並且允許屬性 ( .name
) 訪問字段以及下標 ( ['name']
)。 作為一個打字困難的人,我發現寫字更可取
cells = notebook.cells
code_cells = [c for c in cells if c.cell_type == 'code']
for cell in code_cells:
print(cell.source)
在回答這個問題時,我意識到nbformat
庫已被nbformat
,因此可以在沒有 Jupyter 其余部分的情況下使用pip
進行安裝。
如果您使用的是jupyter lab,則選項是: File > Export Notebook As > Executable Script
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.