簡體   English   中英

僅從 Jupyter Notebook 中獲取代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM