jupyter 转 markdown 要是能内嵌图片就好了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
XIVN1987
V2EX    Jupyter

jupyter 转 markdown 要是能内嵌图片就好了

  •  
  •   XIVN1987 2020-12-30 00:33:37 +08:00 2905 次点击
    这是一个创建于 1814 天前的主题,其中的信息可能已经有所发展或是发生改变。

    jupyter 的 Fille -> Download as 可以将 notebook 转换成 markdown,方便记笔记

    可是 notebook 中的图片不会转换进 markdown 里,所以有较多图片的 notebook 转换成 markdown 就没啥意义了

    我看了下 notebook 是把图片内嵌进 xxx.ipnb 文件中的,要是转换成 markdown 时也能将图片内嵌进 markdown 就好了

    7 条回复    2020-12-31 17:30:02 +08:00
    neosfung
        1
    neosfung  
       2020-12-30 03:00:15 +08:00 via iPhone   1
    我记得输出 html 的时候是图片转换为 base64,可以试一下看看找一下相应的代码把这步嵌入到生成 markdown 中
    XIVN1987
        2
    XIVN1987  
    OP
       2020-12-30 09:35:40 +08:00
    @neosfung
    确实,html 输出中通过<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...">语法内嵌了图片

    查了下这个语法叫 Data URI scheme,,希望 markdown 也能支持这种用法,,这样笔记会方便很多

    感谢指点
    neosfung
        3
    neosfung  
       2020-12-30 18:54:10 +08:00 via iPhone   1
    @XIVN1987 markdown 我记得支持的,这种常见的 html 标签
    XIVN1987
        4
    XIVN1987  
    OP
       2020-12-30 20:17:44 +08:00
    @neosfung
    感谢,,试了下确实支持

    之前测试不工作,原来是 jupyter 导出的时候多了两个换行,,为知笔记就不认了,,把换行去掉就可以了

    jupyter 导出的是

    ``` Javascript
    <img src="data:image/png;base64,iVBO...
    "
    >
    ```

    改成

    ``` Javascript
    <img src="data:image/png;base64,iVBO...">
    ```

    就可以了,,
    XIVN1987
        5
    XIVN1987  
    OP
       2020-12-30 21:25:46 +08:00
    XIVN1987
        6
    XIVN1987  
    OP
       2020-12-30 22:59:23 +08:00
    写了脚本,自动将 jupyter 导出的 markdown 中的

    ```
    ![png](output_3_0.png)
    ```

    替换成

    ```
    <img src="data:image/png;base64,iBO...">
    ```

    代码如下:

    ``` python
    #! python3
    import os
    import re
    import binascii

    srcfil = r'C:\Users\WMX\Desktop\pylab\pylab.md'

    srcdir = os.path.dirname(srcfil)
    dstfil = os.path.join(srcdir, os.path.basename(srcfil).replace('.md', '_emb.md'))

    img_base64 = {}
    for root, dirs, files in os.walk(srcdir):
    for fname in files:
    if fname.endswith('.png'):
    img_data = open(os.path.join(root, fname), 'rb').read()
    img_base64[fname] = f'<img src="data:image/png;base64,{binascii.b2a_base64(img_data, newline=False).decode("latin-1")}">'

    cOntent= open(srcfil, 'r', encoding='utf-8').read()
    for img in img_base64:
    cOntent= re.sub(f'\n!\[png\]\({img}\)\n', f'\n{img_base64[img]}\n', content)

    open(dstfil, 'w', encoding='utf-8').write(content)

    ```
    neosfung
        7
    neosfung  
       2020-12-31 17:30:02 +08:00   1
    我写了个钩子,每次保存 ipyhb 文件的时候保存同时输出 html 和 py 文件,方便记录实验数据( html )和 git 查看改动( py )
    这是我的钩子
    你可以把 markdown 的保存和改写都放进来
    这样每次保存 ipyhb 的时候都可以得到相对应的 markdown 文件了

    ```python
    ### If you want to auto-save .html and .py versions of your notebook:
    # modified from: https://github.com/ipython/ipython/issues/8009
    import os
    from subprocess import check_call

    def post_save(model, os_path, contents_manager):
    """post-save hook for converting notebooks to .py scripts"""
    if model['type'] != 'notebook':
    return # only do this for notebooks
    d, fname = os.path.split(os_path)
    check_call(['ipython', 'nbconvert', '--to', 'script', fname], cwd=d)
    check_call(['ipython', 'nbconvert', '--to', 'html', fname], cwd=d)

    c.FileContentsManager.post_save_hook = post_save
    ```
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5205 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 07:15 PVG 15:15 LAX 23:15 JFK 02:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86