jupyter lab導出ipynb為html並且刪除代碼單元格


前言

最近剛好放假了,這個問題其實三四個月前我就遇到並且解決了,不過由於學校課程太多,一直搞大數據,人工智能。。。。。。沒時間寫博客了,雖然我寫的也沒啥人看沒啥人點贊,剛好最近放假了,感覺這個應該對一些人也有幫助,就找個時間寫下來了,下面言歸正傳,我接下來將會用我上一篇文章用到的數據集和生成的圖表來做演示(主要是懶,不想再弄多一份新的圖表了)

Jupyter lab導出html

jupyter lab可以導出成html格式,相信很多人都清楚,可以很方便地展示,傳播、分享我們的作品,例如,我之前做了一個COVID-19疫情的可視化,並且我想向老師,同學展示一下我的作品,那么現在我需要將它導出為html:

jupyter lab 導出html
好,可以看到,在 File->Export Notebook As...->Export Notebook As HTML 就可以將我們的ipynb導出為html,此時會提示我們下載,我們只需要下載就行

打開我們下載后的html文件
jupyter lab 導出的html頁面

可以看到除了有可交互的圖表外,還有一些代碼,並且代碼往往比較長,對於展示給不熟悉代碼的人來說,十分影響我們的效果

刪除html里面的代碼cell

對html頁面進行分析
html頁面分析

可以發現,所有cell都是給一個類名為 cell border-box-sizing text_cell rendered 的div包裹着,其中markdown輸出的cell跟code輸出的cell又有不同,code導出成的 cell border-box-sizing text_cell rendered 里面,還有input 和 output_wrapper兩個div,這是markdown 沒有的,其中很明顯,class='input'的div就是包裹着code cell 的In,即我們輸入代碼的cell,就是我們需要刪除的cell,而output_wrapper包含的就是我們代碼輸出的結果,即我們需要保留的

html分析2
網上很多指標不治本的方法,我看到的最多的就是用JavaScript來動態刪除input,但是這並不能達到我的預期效果,用這種方法的話,一開始打開頁面,還是會看到代碼輸入框的內容,需要等一會才會刪掉。所以我決定直接從html代碼入手,直接在代碼里面就刪除

通過上面的分析,我們可以很方便地用正則找出我們需要刪除的html代碼,然后刪除

下面是找出 code cell的輸入代碼框的html的正則表達式:

r = '(\\<div class="input"\\>[\\s]*\\<div class="prompt input_prompt"\\>[^<]*</div>[\\s]*\\<div class="inner_cell"\\>[\\s]*\\<div class="input_area"\\>[\\s]<div class=" highlight hl-ipython3">[\\s\\S]+?)<div class="output_wrapper">'

由於我還想刪除下面紅色方框圈出來的 Out 17等提示,所以我還加了一條正則:

rr = '(<div class="prompt output_prompt">[\s\S]+?</div>)'

然后假設我們下載的html文件‘Untitled.html’,跟我們python運行環境在同一路徑下,並且我們將修改后的html文件重命名為fix_Untitled.html保存在當前路徑

import re

r = '(\\<div class="input"\\>[\\s]*\\<div class="prompt input_prompt"\\>[^<]*</div>[\\s]*\\<div class="inner_cell"\\>[\\s]*\\<div class="input_area"\\>[\\s]<div class=" highlight hl-ipython3">[\\s\\S]+?)<div class="output_wrapper">'
    
rr = '(<div class="prompt output_prompt">[\s\S]+?</div>)'

with open('Untitled.html') as f:
    s = f.read()

l = re.findall(r,s)
for i in l:
    s = s.replace(i,'')

l = re.findall(rr,s)
for i in l:
    s = s.replace(i,'')

with open('fix_Untitled.html','w') as f:
    f.write(s)

接下來我們看看我們修改后的html界面
fix_Untitled

可以看到目前只剩下我們的markdown代碼和python代碼輸出的圖表了

我們還可以修改notebook的寬度大小,只需要在fix_Untitled.html 找到對應位置就可以修改啦,這里就不說了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM