JupyterのMarkdownをQiitaへ投稿
Jupyter Notebookの内容を「File → Export」機能により「Markdown」形式でエクスポートすると、得られる.mdファイルの内容をそのままQiitaに貼り付けて投稿できるので、とても便利です。
ただ、Notebookで描画したグラフなどの画像がある場合は、画像へのリンクアドレスがQiitaへ投稿すると違ってくるので、書き換える必要があります。
画像も含めてそのままQiitaへ投稿する
そこで、画像をQiitaへ投稿・画像のリンクアドレスを書き換え、を行うスクリプトを試作してみます。
投稿の仕方
Jupyter Notebookの内容を「File → Export」から「Markdown」形式でエクスポート。
↓
Notebookに画像がある場合は、.zipファイルが得られます。この中身の、.mdファイル①と、その他の画像ファイル(.png)全て②、を以降で使います。
↓
後段に掲載の「conv_jupyter_md_pic_to_qiita.py」ファイルと同じフォルダに、.zipの中の.mdファイル①を配置。(任意の名前でOK、1個の.mdだけ配置)
↓
Qiitaで新規投稿→記事を作成し、新しい編集ページ枠の上へ、.zipの中の画像ファイル(.png)全て②をドラッグアンドドロップ。
↓
画像がアップロードされ、Markdownのリンク文字列が生成されるので、これを全て選択して切り取り、.txtファイル③を新規に用意して貼り付けて保存。
↓
「conv_jupyter_md_pic_to_qiita.py」ファイルと同じフォルダに、.txtファイル③を配置。(任意の名前でOK、1個の.txtだけ配置)
↓
スクリプト「conv_jupyter_md_pic_to_qiita.py」を実行。
↓
.mdファイル①のファイル名に.convが付いた.mdファイル④が新しく作成され、この中には、画像のリンクアドレスがQiitaへ投稿した画像のものに変換されたMarkdownが出力されています。
↓
生成された.mdファイル④の内容をすべてコピーして、Qiitaの編集ページへ貼り付けます。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()
コードの概要
作成中。