Jupyter Notebook의 내용을 이미지를 포함하여 그대로 Qiita에 게시

Jupyter의 Markdown을 Qiita에 게시



Jupyter Notebook의 내용을 「File → Export」기능에 의해 「Markdown」형식으로 내보내면, 얻을 수 있는 .md 파일의 내용을 그대로 Qiita에 붙여 넣어 투고할 수 있으므로, 매우 편리합니다.

다만, Notebook에서 묘화한 그래프등의 화상이 있는 경우는, 화상에의 링크 주소가 Qiita에 투고하면 다르기 때문에, 재기록할 필요가 있습니다.


이미지를 포함하여 그대로 Qiita에 게시



그래서, 이미지를 Qiita에 투고·이미지의 링크 주소를 재기록, 하는 스크립트를 시작해 보겠습니다.

게시 방법



Jupyter Notebook의 내용을 "File → Export"에서 "Markdown"형식으로 내보내기.


노트북에 이미지가 있으면 .zip 파일을 얻을 수 있습니다. 이 내용의 .md 파일 ①과 그 외의 이미지 파일(.png) 모두 ②를 이후에서 사용합니다.

후단에 게재된 'conv_jupyter_md_pic_to_qiita.py' 파일과 같은 폴더에 .zip 안의 .md 파일①을 배치.

Qiita에서 신규 투고 → 기사를 작성하고 새로운 편집 페이지 테두리 위에 .zip 안의 이미지 파일 (.png) 모두 ②를 드래그 앤 드롭.


이미지가 업로드되고 Markdown의 링크 문자열이 생성되므로 이것을 모두 선택하고 잘라내고 .txt 파일 ③을 새로 준비하여 붙여넣고 저장.

"conv_jupyter_md_pic_to_qiita.py"파일과 같은 폴더에 .txt 파일 ③을 배치.

스크립트 "conv_jupyter_md_pic_to_qiita.py"를 실행.

.md 파일 ①의 파일명에 .conv가 붙은 .md 파일 ④가 새롭게 작성되어, 이 중에는 이미지의 링크 주소가 Qiita에 투고한 이미지의 것으로 변환된 Markdown이 출력되고 있습니다.

생성된 .md 파일④의 내용을 모두 복사하여 Qiita의 편집 페이지에 붙여넣습니다. Qiita 미리보기에 이미지도 함께 표시됩니다.

이미지의 링크 주소를 다시 쓰는 스크립트 .py 코드



conv_jupyter_md_pic_to_qiita.py
# -*- coding: utf-8 -*-

# Jupyter Notebookでダウンロード(エクスポート)したMarkdown(.zipファイル)を
# Qiitaで公開するために、画像パスを置換。

# Markdown(.zipファイル)の中にある画像ファイルは、Qiitaの編集ページで
# すべてドラッグアンドドロップ、その時に出てくる画像表示のMarkdownを
# テキストファイルに保存して、このスクリプトで置換。

import pathlib, re

# sec: main

def main(): # 実行切替用
    run__main1()

def run__main1():

    # sec: path

    path_md = None
    for path_md in pathlib.Path(".").glob("*.md"): break

    print("load:", path_md)
    if path_md is None: # if: 該当なし
        return

    path_qi = None
    for path_qi in pathlib.Path(".").glob("*.txt"): break

    print("load:", path_qi)
    if path_qi is None: # if: 該当なし
        return

    # sec: load Qiita-pic-list

    with path_qi.open(mode='r', encoding="UTF8") as file:
        lines_qi = file.readlines()

    # sec: make list

    re_pic = re.compile(r"!\[([^\]]+)\]\(([^)]+)\)") #" Qiitaコード色付けが不調の為
    qi_pic_list = []
    for line in lines_qi:

        if len(line) <= 0:
            continue

        matched = re_pic.match(line)
        if matched is None: # if: 画像のMarkdownと不一致
            print("エラー: 画像のMarkdownと不一致", line)
            return

        qi_pic_list.append( (matched.group(1), matched.group(2)) )

    print("conv:", len(lines_qi))

    re_pic = None
    lines_qi = None

    # sec: conv

    text_md = path_md.read_text(encoding="UTF8")
    for name, addr in qi_pic_list:
        text_md = text_md.replace("![png](%s)" % name, "![%s](%s)" % (name, addr))

    # sec: output

    path_md_out = path_md.with_name("%s.conv%s" % (path_md.stem, path_md.suffix))
    path_md_out.write_text(text_md, encoding="UTF8")

    print("output:", path_md_out)

# sec: entry

if __name__ == "__main__": main()

코드 개요



작성 중.

좋은 웹페이지 즐겨찾기