如何将CSDN文档转换成IPYNB格式的文档?
Posted 卓晴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将CSDN文档转换成IPYNB格式的文档?相关的知识,希望对你有一定的参考价值。
简 介: ※IPYNB格式的文档可以很方便在Jupyter Notebook环境内方便研究人员对于算法、数据进行操作。Markdown文本则便于形成各种网络文档。本文介绍了利用notedown实现将CSDN中的Markdown文件转换成IPYNB文档。利用它可以方便对于CSDN中的研究文档进一步实验。
关键词
: CSDN,Markdown,IPYNB,NOTEDOWN
§01 IPYNB文档
1.1 什么是IPYNB文档?
1.1.1 IPYNB应用
IPYNB 是 Jupyter Notebook 文档格式,是一个交互式计算环境下帮助科研人员应用 Python 程序操作、分析数据的文档。它包含了基于WEB
应用程序Jupyter Notebook
过程用于计算的输入、输出、数学函数、图片以及解释文字等等。 IPYNB
文本可以转换成 .html, .PDF
, reStructuredText
以及LaTex
文档。
▲ 图1.1.1 IPYNB文档界面
1.1.2 IPYNB格式
在 What is an IPYNB Files? 给出了IPYNB notebooks文件格式描述。 IPYNB文件格式是 纯文本文件(plain text) , 使用 JSON 文件语法格式,方便人们阅读、分享。通常科研人员通常将它们的IPYNB文件在网络上发布并提供可以访问的 URLs ,这几大方便了其他 Jupyter Notebook 用户:
- 下载文档并在自己的Jupyter Notebook中运行;
- 利用在线Jupyter Notebook 浏览器进行阅读而不必另外安装其它软件。
1.1.3 IPYNB的含义
Jupyter Notebook 的IPYNB文档通常被认为是IPYTHON NOTEBOOK ,所以它的文件扩展名被记做 .ipynb
(IPy thon N ote B ook),尽管最初IPYNB文件格式是用来支持IPython用户,不过现在主要是Jupyter Notebook 在支持IPython的是常闭使用。
1.1.4 打开IPYNB文档
你可以在以下几个软件中打开IPYNB文档:
- Jupyter Notebook(跨平台)开发环境;
- Jpyter Notebook Viewer(Web)
- Cantor(Linux)
- Google Claboratory(Web)
- Microsoft Visual Studio Code ,这也是一个跨平台文本编辑器,可以创建、打开、保存Jupyter Notebook。
如果使用Jupyter Notebook Viewer打开IPYNB文档,该文档需要被存储在网络上,比如使用 Github,或者其他文件存储服务器。
1.2 CSDN文档
CSDN(Chinese Software Developer Network) 是国内软件技术开发人员交流的平台,它提供 富文本、Markdown 编辑器方便软件开发人员记录、分析自己的学习、研究内容。特别是它的 Markdown 编辑器 操作方便,功能强大,方便了工程技术人员书写和记录自己的思想与工作数据。
1.2.1 从IPYNB到Markdown
现在有一些在线工具,方便将IPYNB格式的文档转换成Markdown文件。
- Vertopal — Free Online Converter
- Convert a Jupyter/IPython notebook to an R Markdown document
- Converting notebooks to other formats?
- Convert IPython Notebooks to markdown (and back) :这个工具包是Github上的notedown软件包,它提供了将ipynb文档与markdown文档之间的来回的转换。
(1)nbconvert转换IPYNB文档
根据 Converting notebooks to other formats?中给出了利用 nbconvert将IPYNB转换成 html, latex, pdf, slide, markdown, rst , script, notbook
格式的文档。
基本语法:
$ ipython nbconvert --to FORMAT notebook.ipynb
在 如何利用 nbconvert将 IPYNB文档转换 Markdown文档? 给出了具体应用nbconvert命令转换IPYNB文档的 示例。它是将 飞桨AI Studio - 人工智能学习与实训社区 中的文档 基于自监督学习的目标检测伪标签生成 转换成Markdown文档,并上载到CSDN中。
1.2.2 从Markdown转换IPYNB
将Markdown文档转换成IPYNB格式在很多场合是需要的:
- 希望将自己的Markdown记录的文件,特别是其中包含有处理代码分享给其他开发人员;
- 重新运行Markdown中的处理过程;
特别是在一些场合,Markdown
编辑器比直接在Jupyter Notebook
进行编辑更加的方便,比如CSDN
的Markdown
编辑器就非常好。因此,将Markdown
文档转换成IPYNB
就可以达到让自己的 技术文档的得到更大分享的目标。
在网络上也存在一个在线的将Markdown转换成IPYNB的程序:
- Convert TXT MARKDOWN to IPYNB
- Markdown for Jupyter notebooks cheatsheet :介绍了如何直接将Markdown的Cells添加到Jupyter Notebook。
- Convert IPython Notebooks to markdown (and back) :这个工具包
notedown
提供了在ipynb
与markdown
文档之间的转换的功能。
在博文 如何利用 notedown 完成 ipynb与markdown之间的格式转换? 测试了notedown软件将Markdown文件转换成jpynb文档。但是发现:
- 对于CSDN中的Markdown文本格式中扩增的关于图片尺寸、显示位置的支持语法,在转换之后在Jupyter Notebook中并不支持;
- 对于CSDN中的Markdown代码,格式修饰都都可以很好的支持;
因此,需要增加额外的格式过滤处理,将CSDN中的Markdown文档进行格式过滤。
在 怎么在CSDN中写微信公众号推文? 介绍了将CSDN文档转换成 墨滴文档 ,转换转换成微信推文格式。因此可以应用上述转换过程,再加上notedown的功能,联合形成ipynb格式。
§02 CSDN→IPYNB
2.1 转换方案
根据【01】中初步实验,通过notedown软件在转换CSDN导出的Markdown文档过程中会对于CSDN中的增强功能的格式不适应,所以需要进行格式的过滤。根据 将CSDN Markdown文档转换成MDNICE文档 方式,利用它程序(cd2md)框架,将CSDN中的Markdown文本进行过滤处理,存储在临时文件中。然后再调用notedown进行转换。
2.1.1 修改cd2md
在cd2md文件中,增加新的命令选项:
cd2md >csdn
如果有**>** 符号,代表将对应内容写入文件 csdn.md中,注意 csdn是缺省的选项。
在打开文件写入的时候,需要将带有中文的信息通过bytes函数写入,否则就会出现乱码。
outfile = os.path.join(r'd:\\temp', outfilename)
with open(outfile, 'wb') as f:
f.write(bytes(pastestr, 'utf-8'))
printf("Output markdown file to %s.\\a"%outfilename)
2.1.2 调用notedown进行转换
调用os.system
执行notedown
将 Markdown
文件转换成ipynb
文件。
printf("Convert markdown to __ipynb__.\\a")
os.system(r'notedown d:\\temp\\csdn.md > d:\\temp\\csdn.ipynb')
2.2 转换测试
测试 测试录制的电话拨码声音信号在发送过程中的问题 文档。执行如下命令:
cd2md >
便可以生成 csdn.ipynb。调入BML CodeLab中,使用Notebook打开,可以看到文档转换后的格式很完美。
▲ 图2.1.1 转换后的ipynb上载BML CodeLab Notebook
※ 转换总结 ※
IPYNB格式的文档可以很方便在Jupyter Notebook环境内方便研究人员对于算法、数据进行操作。Markdown文本则便于形成各种网络文档。本文介绍了利用notedown实现将CSDN中的Markdown文件转换成IPYNB文档。利用它可以方便对于CSDN中的研究文档进一步实验。
3.1 cd2md程序
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# CD2MD.PY -- by Dr. ZhuoQing 2020-02-05
#
# Note:cd2md arg1 arg2..
# argn(n=1,2,3,4...)
# #1223 : Change the title #Number
# |23 : Select Table column
# * : Delete bold
# i,C : Auto indent
# c : delete Code
# & : nbsp keep
# \\\\ : Merge Picture count
# // : Link picture count
# - : Note at follow space line for linkage
# _ : Get rid of ---
# $ : Keep § of the title.
# v : Copy into clipboard : (default)
# >outfile: Using gitee format save file:outfile
#
#
#============================================================
from head import *
import webbrowser
import requests
from bs4 import BeautifulSoup
#------------------------------------------------------------
csdn_title = '写文章-CSDN博客'
mdnice_title = '让排版变'
gitee_title = '· 编辑文件 ·'
typora_title = 'Typora'
question_title = '问答提问页'
#------------------------------------------------------------
rect = tspgetwindowrect(gitee_title)
giteeflag = abs(sum(rect))
rect = tspgetwindowrect(mdnice_title)
mdniceflag = abs(sum(rect))
#------------------------------------------------------------
rect = tspgetwindowrect(typora_title)
typoraflag = abs(sum(rect))
if typoraflag > 0:
giteeflag = 1
#------------------------------------------------------------
rect = tspgetwindowrect(question_title)
questionflag = abs(sum(rect))
if questionflag > 0:
giteeflag = 1
clipboardflag = 0 # Copy content into clipboard
#------------------------------------------------------------
if mdniceflag == 0 and questionflag == 0 and giteeflag == 0:
giteeflag = 1
clipboardflag = 1
questionflag = 1
#------------------------------------------------------------
outfilename = ''
if len(sys.argv) > 1:
if sys.argv[1][:1] == '>':
if len(sys.argv[1][1:]) > 0:
outfilename = sys.argv[1][1:] + '.md'
sys.argv[1:] = sys.argv[2:]
else:
if len(sys.argv) > 2:
outfilename = sys.argv[2] + '.md'
sys.argv[2:] = sys.argv[3:]
else:
sys.argv[1:] = sys.argv[2:]
outfilename = 'csdn.md'
giteeflag = 1
clipboardflag = 0
questionflag = 0
#------------------------------------------------------------
csdnurl = ''
csdnpaper = ''
if giteeflag > 0:
csdnurl = clipboard.paste()
if csdnurl.find('https:') < 0:
csdnurl = tspread()[-1]
if csdnurl.find('?articleId=') < 0:
if csdnurl.find('https:') < 0:
csdnurl = ''
else:
findid = csdnurl.find('Id=')
ss = csdnurl[findid+3:]
csdnurl = 'https://zhuoqing.blog.csdn.net/article/details/%s'%ss
if len(csdnurl) > 0:
if csdnurl.find('http') == 0:
xmltext = requests.get(csdnurl)
soup = BeautifulSoup(xmltext.text, 'lxml')
try:
csdnpaper = soup.head.title.string.split('_')[0]
except:
pass
#------------------------------------------------------------
keepnbspflag = 0
linknotestr = ''
linknoteflag = 0
linedeleteflag = 1
#------------------------------------------------------------
def char2color(argv1):
color = ''
if argv1.count('a') == 1: color = 'gray'
if argv1.count('a') == 2: color = '#b19e26'
if argv1.count('A') == 1: color = 'olive'
if argv1.count('A') == 2: color = '#2693ba'
if argv1.count('b') == 1: color = 'blue'
if argv1.count('b') == 2: color = 'darkslateblue'
if argv1.count('B') == 1: color = 'slateblue'
if argv1.count('d') == 1: color = 'seagreen'
if argv1.count('D') == 1: color = '#%06x'%int.from_bytes(tspgetcolor().to_bytes(3, 'little'), 'big')
if argv1.count('g') == 1: color = 'darkgreen'
if argv1.count('g') == 2: color = 'green'
if argv1.count('K') == 1: color = 'black'
if argv1.count('m') == 1: color = 'brown'
if argv1.count('M') == 1: color = '#944276'
if argv1.count('p') == 1如何利用 notedown 完成 ipynb与markdown之间的格式转换?