前言
最近剛好放假了,這個問題其實三四個月前我就遇到並且解決了,不過由於學校課程太多,一直搞大數據,人工智能。。。。。。沒時間寫博客了,雖然我寫的也沒啥人看沒啥人點贊,剛好最近放假了,感覺這個應該對一些人也有幫助,就找個時間寫下來了,下面言歸正傳,我接下來將會用我上一篇文章用到的數據集和生成的圖表來做演示(主要是懶,不想再弄多一份新的圖表了)
Jupyter lab導出html
jupyter lab可以導出成html格式,相信很多人都清楚,可以很方便地展示,傳播、分享我們的作品,例如,我之前做了一個COVID-19疫情的可視化,並且我想向老師,同學展示一下我的作品,那么現在我需要將它導出為html:
好,可以看到,在 File->Export Notebook As...->Export Notebook As HTML 就可以將我們的ipynb導出為html,此時會提示我們下載,我們只需要下載就行
打開我們下載后的html文件
可以看到除了有可交互的圖表外,還有一些代碼,並且代碼往往比較長,對於展示給不熟悉代碼的人來說,十分影響我們的效果
刪除html里面的代碼cell
對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包含的就是我們代碼輸出的結果,即我們需要保留的
網上很多指標不治本的方法,我看到的最多的就是用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界面
可以看到目前只剩下我們的markdown代碼和python代碼輸出的圖表了
我們還可以修改notebook的寬度大小,只需要在fix_Untitled.html 找到對應位置就可以修改啦,這里就不說了