简 介: ※IPYNB格式的文档可以很方便在Jupyter Notebook环境内方便研究人员对于算法、数据进行操作。Markdown文本则便于形成各种网络文档。本文介绍了利用notedown实现将CSDN中的Markdown文件转换成IPYNB文档。利用它可以方便对于CSDN中的研究文档进一步实验。

关键词CSDNMarkdownIPYNBNOTEDOWN

#mermaid-svg-VqpCFakZ64Mb0TWU {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-VqpCFakZ64Mb0TWU .error-icon{fill:#552222;}#mermaid-svg-VqpCFakZ64Mb0TWU .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-VqpCFakZ64Mb0TWU .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-VqpCFakZ64Mb0TWU .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-VqpCFakZ64Mb0TWU .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-VqpCFakZ64Mb0TWU .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-VqpCFakZ64Mb0TWU .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-VqpCFakZ64Mb0TWU .marker{fill:#333333;stroke:#333333;}#mermaid-svg-VqpCFakZ64Mb0TWU .marker.cross{stroke:#333333;}#mermaid-svg-VqpCFakZ64Mb0TWU svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-VqpCFakZ64Mb0TWU .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-VqpCFakZ64Mb0TWU .cluster-label text{fill:#333;}#mermaid-svg-VqpCFakZ64Mb0TWU .cluster-label span{color:#333;}#mermaid-svg-VqpCFakZ64Mb0TWU .label text,#mermaid-svg-VqpCFakZ64Mb0TWU span{fill:#333;color:#333;}#mermaid-svg-VqpCFakZ64Mb0TWU .node rect,#mermaid-svg-VqpCFakZ64Mb0TWU .node circle,#mermaid-svg-VqpCFakZ64Mb0TWU .node ellipse,#mermaid-svg-VqpCFakZ64Mb0TWU .node polygon,#mermaid-svg-VqpCFakZ64Mb0TWU .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-VqpCFakZ64Mb0TWU .node .label{text-align:center;}#mermaid-svg-VqpCFakZ64Mb0TWU .node.clickable{cursor:pointer;}#mermaid-svg-VqpCFakZ64Mb0TWU .arrowheadPath{fill:#333333;}#mermaid-svg-VqpCFakZ64Mb0TWU .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-VqpCFakZ64Mb0TWU .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-VqpCFakZ64Mb0TWU .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-VqpCFakZ64Mb0TWU .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-VqpCFakZ64Mb0TWU .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-VqpCFakZ64Mb0TWU .cluster text{fill:#333;}#mermaid-svg-VqpCFakZ64Mb0TWU .cluster span{color:#333;}#mermaid-svg-VqpCFakZ64Mb0TWU div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-VqpCFakZ64Mb0TWU :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

IPYNB文档
目 录
Contents
什么是IPYNB文档?
CSDN文档
CSDN-IPYNB
转换方案
转换测试
转换总结
cd2md程序

§01 IPYNB文档


1.1 什么是IPYNB文档?

1.1.1 IPYNB应用

  IPYNBJupyter Notebook 文档格式,是一个交互式计算环境下帮助科研人员应用 Python 程序操作、分析数据的文档。它包含了基于WEB应用程序Jupyter Notebook 过程用于计算的输入、输出、数学函数、图片以及解释文字等等。 IPYNB文本可以转换成 .HTML, .PDFreStructuredText 以及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进行编辑更加的方便,比如CSDNMarkdown编辑器就非常好。因此,将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提供了在ipynbmarkdown文档之间的转换的功能。

  在博文 如何利用 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执行notedownMarkdown文件转换成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 = 1clipboardflag = 0                   # Copy content into clipboard#------------------------------------------------------------
if mdniceflag == 0 and questionflag == 0 and giteeflag == 0:giteeflag = 1clipboardflag = 1questionflag = 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 = 1clipboardflag = 0questionflag = 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'%ssif 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 = 0linknotestr = ''
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: color = '#7a37ab'if argv1.count('P') == 1: color = '#7f00ff'if argv1.count('q') == 1: color = 'cyan'if argv1.count('Q') == 1: color = 'darkcyan'if argv1.count('q') == 2: color = '#b9a0a6'if argv1.count('r') == 1: color = 'red'if argv1.count('R') == 1: color = 'darkred'if argv1.count('r') == 2: color = 'c000'if argv1.count('t') == 1: color = 'teal'if argv1.count('T') == 1: color = '#008090'if argv1.count('v') == 2: color = 'silver'if argv1.count('v') == 1: color = 'blueviolet'if argv1.count('w') == 1: color = 'white'if argv1.count('W') == 1: color = '#c02060'if argv1.count('y') == 1: color = 'yellow'if argv1.count('y') == 2: color = '#b01019'if argv1.count('Y') == 1: color = '#e06030'if argv1.count('z') == 1: color = 'purple'if argv1.count('Z') == 1: color = '#600090'return colordef char2face(argv1):face = ''if argv1.count('s') == 1: face= '宋体'if argv1.count('k') == 1: face= '楷体'if argv1.count('f') == 1: face= '仿宋'if argv1.count('l') == 1: face= '隶属'if argv1.count('h') == 1: face= '黑体'if argv1.count('F') == 2: face=''return face#------------------------------------------------------------
changecolordict = {}
changesizedict = {}
changefacedict = {}
changetitledict = {}
tablesect = []deletecode = 1
indentflag = 0
bolddeleteflag = 0
mergepicflag = 0
linkpicflag = 0
deletechapterflag = 1if giteeflag > 0:deletecode = 0#------------------------------------------------------------
if len(sys.argv) > 1:for v in sys.argv[1:]:if v.count('&') > 0:keepnbspflag = 1v = v.replace('&', '')if v.count('\\') > 0:mergepicflag = v.count('\\')v = v.replace('\\', '')if v.count('/') > 0:linkpicflag = v.count('/')v = v.replace('/', '')if v.count('-') > 0:linknoteflag = v.count('-')*2v = v.replace('-', '')if v.count('_') > 0:linedeleteflag = 0v = v.replace('_', '')if v.count('$') > 0:v = v.replace('$', '')deletechapterflag = 0#----------------------------------------------------if len(v) > 1:if v[0] >= '1' and v[0] <= '9' and v[1] >= '0' and v[1] <= '9':changesizedict.update([(v[0], v[1])])elif v[0] == '#' and len(v) >=3:if v[1] >= '0' and v[1] <= '9' and v[2] >= '0' and v[2] <= '9':changetitledict.update([(v[1], v[2])])if len(v) >= 5:if v[3] >= '0' and v[3] <= '9' and v[4] >= '0' and v[4] <= '9':changetitledict.update([(v[3], v[4])])if len(v) >= 7:if v[5] >= '0' and v[5] <= '9' and v[6] >= '0' and v[6] <= '9':changetitledict.update([(v[5], v[6])])if len(v) >= 9:if v[7] >= '0' and v[7] <= '9' and v[8] >= '0' and v[8] <= '9':changetitledict.update([(v[7], v[8])])if len(v) >= 11:if v[9] >= '0' and v[9] <= '9' and v[10] >= '0' and v[10] <= '9':changetitledict.update([(v[9], v[10])])if len(v) >= 13:if v[11] >= '0' and v[11] <= '9' and v[12] >= '0' and v[12] <= '9':changetitledict.update([(v[11], v[12])])if len(v) >= 15:if v[13] >= '0' and v[13] <= '9' and v[14] >= '0' and v[14] <= '9':changetitledict.update([(v[13], v[14])])elif v[0] == '|':tablesect = [int(s)-1 for s in v[1:]]else:fromcolor = char2color(v[0:-1])tocolor = char2color(v[-1:])if len(fromcolor) > 0 and len(tocolor) > 0:changecolordict.update([(fromcolor, tocolor)])continuefromface = char2face(v[0:-1])toface = char2face(v[-1:])if len(fromface) > 0 and len(toface) > 0:changefacedict.updata([(fromface, toface)])else:if v == 'c':deletecode = 0elif v == 'i':indentflag = 1elif v == 'C':indentflag = 1elif v == '*':bolddeleteflag = 1elif v == 'v':questionflag = 1giteeflag = 1clipboardflag = 1#------------------------------------------------------------
if len(tablesect) > 0:printf(tablesect)tspsendwindowkey(mdnice_title, 'c', control=1)mdstr = clipboard.paste()if len(mdstr) > 0:mdline = mdstr.split('\n')mdstr = ''maxts = max(tablesect)for s in mdline:if s.count('|') > maxts:ss = s.split('|')sss = []for id,a in enumerate(ss):if id in tablesect:sss.append(a)s = '|'.join(sss)mdstr = mdstr + s + '\n'clipboard.copy(mdstr)tspsendwindowkey(mdnice_title, "v", control=1)exit()#------------------------------------------------------------
for c in changecolordict.keys():fromstr = 'color=%s'%ctostr = 'color=%s'%changecolordict[c]printff(fromstr, tostr)#------------------------------------------------------------
def checkmdnice(waittime=0):begintime = time.time()while True:windowstr = tspgetwindowtitle()for s in windowstr:if s.find(mdnice_title) >= 0:return 1;if time.time() - begintime >= waittime: return 0
#
#------------------------------------------------------------
'''
if checkmdnice(0) == 0:webbrowser.open('http://www.mdnice.com')if checkmdnice(10) == 0:printf('Can not open MDNICE .....')exit()
'''
#------------------------------------------------------------
if mdniceflag > 0:tspsendwindowkey(mdnice_title, '\t\t\t\t\t\t\t\t\t\t')tspsendwindowkey(mdnice_title, "a", control=1)tspsendwindowkey(mdnice_title, "%c"%VK_DELETE, vk=1)if giteeflag > 0:tspsendwindowkey(gitee_title, '\t\t\t\t\t\t\t\t\t\t')tspsendwindowkey(gitee_title, "a", control=1)tspsendwindowkey(gitee_title, "%c"%VK_DELETE, vk=1)#------------------------------------------------------------
tspsendwindowkey(csdn_title, "acv", control=1)
csdnstrsect = clipboard.paste().split('\n')
pastestr = ''#------------------------------------------------------------
notedim = []
linkdim = []
linknum = []for s in csdnstrsect:n1 = s.find('[^')n2 = s.find(']:')if n1 >= 0 and n2 >= 0 and n2 - n1 < 20:notedim.append(s)n1 = s.find('[')n2 = s.find(']')p1 = s.find('(')p2 = s.find(')')ss1 = s.find('![')if n1 >= 0 and n2 >= 0 and p1 >= 0 and p2 >= 0 and n2 > n1 and p2 > p1 and p1 > n2 and ss1 < 0:linkstr = s[p1+1:p2]linkdim.append(linkstr)linknum.append(0)#------------------------------------------------------------#============================================================
# The main Procedure
#------------------------------------------------------------
deleteflag = 0
lastlen = 0
nbspcount = 0#------------------------------------------------------------
emsprtflag = 0
for id,s in enumerate(csdnstrsect):if len(s) == 0:emsprtflag = 0continueif s[0] == ' ':emsprtflag = 0continueif emsprtflag > 0:csdnstrsect[id] = '&emsp;&emsp;&emsp;' + s + '<br>'continueif s.find('<u>00</u>') > 0:csdnstrsect[id] = '# ' + sif s[0:2] == ': ' and id > 0:if csdnstrsect[id-1].find('●') >= 0 or csdnstrsect[id-1].find('○') >= 0 or\csdnstrsect[id-1].find('△') >= 0 or csdnstrsect[id-1].find('▲') >= 0 or\csdnstrsect[id-1].find('→') >= 0 or csdnstrsect[id-1].find('√') >= 0 or\csdnstrsect[id-1].find('■') >= 0 or csdnstrsect[id-1].find('□') >= 0 or\csdnstrsect[id-1].find('★') >= 0 or csdnstrsect[id-1].find('☆') >= 0 or\csdnstrsect[id-1].find('⊙') >= 0 or csdnstrsect[id-1].find('◎') >= 0:csdnstrsect[id-1] = '&emsp; ' + csdnstrsect[id-1] + '<br>'else: csdnstrsect[id-1] = '&emsp; ● ' + csdnstrsect[id-1] + '<br>'csdnstrsect[id] = '&emsp;&emsp;&emsp;' + s[2:] + '<br>'emsprtflag = 1#------------------------------------------------------------
for s in csdnstrsect:# Get rid all the space line offif keepnbspflag == 0 or nbspcount == 0:if s.find('&nbsp;') >= 0:nbspcount += 1continueif s.find('&ensp;') >= 0:nbspcount += 1continueif s.find('$~$') >= 0:      continueif s.find('<br/>') >= 0:    continueif s.find('---') == 0:if linedeleteflag > 0:continueif giteeflag == 0:if s.find('■ 相关文献链接') >= 0: continueif s.find('■ 相关的链接') >= 0: continueif s.find('相关图表链接') >= 0: continueid = s.find('- [ ] [ ')if id >= 0 and id < 10: continueid = s.find('- [ ]  [ ')if id >= 0 and id < 10: continueid = s.find('- [x] [ ')if id >= 0 and id < 10: continueid = s.find('* [')if id >= 0 and id < 10:id = s.find('](#')if id > 0:continue#--------------------------------------------------------if s.find(">简 介") > 0:id = s.find('(#999000)')if id > 0:s = "><font  face=黑体 color=purple size=4>简 介:</font>" + s[id+9:]if s.find("<span id=") >= 0:id = s.find('</span>')if id > 0:if giteeflag == 0:s = s[id+7:]#--------------------------------------------------------if s.find('# <font color=white') >=0:fontend = s.find('</font>')if fontend > 0:if keepnbspflag == 0:s = s[fontend+len('</font>'):]else:s = '\r\n&nbsp;\r\n' + s[fontend+len('</font>'):]if deletechapterflag > 0:if s.find('>§<') > 0:s = s.replace('>§<', '><')if s.find("&emsp;&emsp;") == 0:if s.find("&emsp;&emsp;&emsp;") < 0:s = '\r\n' + s#-------------------------------------------------------#    n = s.find('size=6')
#    if n >= 0:
#        s = s[0:n] + s[n+6:]
#        printf(s)if s.find('- [ ] ') >= 0:s = s.replace('- [ ] ', '\n□ ')if s.find('- [x] ') >= 0:s = s.replace('- [x] ', '\n■ ')#--------------------------------------------------------if len(changesizedict) > 0:for l in changesizedict.keys():if s.find('size=%s'%l):if changesizedict[l] == '0':s = s.replace('size=%s'%l, '')else: s = s.replace('size=%s'%l, 'size=%s'%changesizedict[l])#--------------------------------------------------------if len(changetitledict) > 0:for t in changetitledict.keys():fromtitle = '#'*int(t)totitle = '#'*int(changetitledict[t])if len(s) > len(fromtitle):if s[0:len(fromtitle)] == fromtitle:if s[len(fromtitle)] != '#':s = s.replace(fromtitle, totitle)break#--------------------------------------------------------if deletecode:if s.find('```python') == 0 or s.find('```c') == 0 or s.find('```mermaid') == 0:deleteflag = 1continueif deleteflag:if s.find('```') == 0:deleteflag = 0continueelse:if typoraflag == 0:if s.find('```mermaid') == 0:deleteflag = 1continueif deleteflag:if s.find('```') == 0:deleteflag = 0continue#--------------------------------------------------------if len(tablesect) > 0:tls = s.split('|')if len(tls) > max(tablesect):s = '|'.join([tls[i] for i in tablesect])#--------------------------------------------------------n1 = s.find('*[')n2 = s.find(']:')if n1 >= 0 and n2 >= 0 and n2 > n1:
#        s = s[n1+2:n2] + s[n2+1:]s = '<font face=楷体>(<u>%s</u>%s)</font>'%(s[n1+2:n2], s[n2+1:])#--------------------------------------------------------# Change the link into notes#    n1 = s.find('[')
#    n2 = s.find(']')
#    p1 = s.find('(')
#    p2 = s.find(')')
#    ss1 = s.find('![')
#    if n1 >= 0 and n2 >= 0 and p1 >= 0 and p2 >= 0 and n2 > n1 and p2 > p1 and p1 > n2 and ss1 < 0:
#        notestr = s[n1+1:n2]
#        linkstr = s[p1+1:p2]
#        printff(notestr, linkstr)
#        headstr = s[0:n1]
#        tailstr = s[p2+1:]#        #----------------------------------------------------
#        flag = 0
#        for id, l in enumerate(linkdim):
#            if l == linkstr:
#                if linknum[id] > 0:
#                    flag = id + 1
#                else: linknum[id] = 1
#                break#        #----------------------------------------------------
#        if notestr.find('**') < 0:
#            s = '%s**%s**[](%s \"%s\")%s\n'%(headstr, notestr, linkstr, notestr, tailstr)
#        else:
#            s = '%s%s[](%s \"%s\")%s\n'%(headstr, notestr, linkstr, notestr, tailstr)#        if flag != 0:
#            if notestr.find('**') < 0:
#                s = '%s**%s<sup>3 [%d]</sup>**%s'%(headstr, notestr, flag, tailstr)
#            else:
#                s = '%s%s<sup>3 [%d]</sup>%s'%(headstr, notestr, flag, tailstr)while True:if giteeflag > 0: breakn1 = s.find('[**')if n1 < 0: breakn2 = s[n1:].find(']') + n1p1 = s[n1:].find('(') + n1p2 = s[n1:].find(')') + n1ss1 = s[n1:].find('![')if n1 >= 0 and n2 >= 0 and p1 >= 0 and p2 >= 0 and n2 > n1 and p2 > p1 and p1 > n2 and ss1 < 0:notestr = s[n1+1:n2]linkstr = s[p1+1:p2]
#            printff(notestr, linkstr)headstr = s[0:n1]tailstr = s[p2+1:]#----------------------------------------------------flag = 0for id, l in enumerate(linkdim):if l == linkstr:if linknum[id] > 0:flag = id + 1else: linknum[id] = 1breakif linknoteflag > 0:noteonlystr = notestr.strip('*').strip('*')linknotestr = linknotestr + '* <font size=%d color=gray><u>%s</u>:<br>%s</font>\r\n'%(linknoteflag, noteonlystr, linkstr)printf(linknotestr)if notestr.find('**') < 0:s = '%s**%s**%s\n'%(headstr, notestr, tailstr)else:s = '%s%s%s\n'%(headstr, notestr, tailstr)if flag != 0:if notestr.find('**') < 0:s = '%s**%s<sup>[%d]</sup>**%s'%(headstr, notestr, flag, tailstr)else:s = '%s%s<sup>[%d]</sup>%s'%(headstr, notestr, flag, tailstr)#----------------------------------------------------else:if notestr.find('**') < 0:s = '%s**%s**[](%s \"%s\")%s\n'%(headstr, notestr, linkstr, notestr, tailstr)else:s = '%s%s[](%s \"%s\")%s\n'%(headstr, notestr, linkstr, notestr, tailstr)if flag != 0:if notestr.find('**') < 0:s = '%s**%s<sup>[%d]</sup>**%s'%(headstr, notestr, flag, tailstr)else:s = '%s%s<sup>[%d]</sup>%s'%(headstr, notestr, flag, tailstr)#                printf(s)else: break#--------------------------------------------------------# Change the formulate space into \spaceif s.count('$') >= 2:
#        printf(s)s = s.replace('\,', '\space ').replace('\:', '\space ')#--------------------------------------------------------# Process the note stringn1 = s.find('[^')n2 = s.find(']:')if n1 >= 0 and n2 >= 0 and n2 - n1 < 20:continuen2 = s.find(']')if n1 >= 0 and n2 >= 0 and n2 - n1 < 20:replacestring = ''for nd in notedim:if nd.find(s[n1:n2+1]) >= 0:sbs1 = nd.find(']:')if sbs1 >= 1:sstemp = nd[sbs1+2:]notepos = sstemp.find(' : ')nextspace = 0if notepos < 0:notepos = sstemp.find(': ')if notepos < 0:notepos = sstemp.find(' :')if notepos < 0:notepos = sstemp.find(':')if notepos >= 0:nextspace = 3else: nextspace = 2else: nextspace = 2else: nextspace = 3if nextspace > 0:explainstr = sstemp[0:notepos].rstrip(' ')notestr = sstemp[notepos+nextspace:]else:explainstr = '说明' #s[n1:n2+1]columnid = sstemp.find(':')notestr = sstempif columnid > 0:explainstr = sstemp[:columnid]notestr = sstemp[columnid+1:]replacestring = '[](%s \"%s\")'%(notestr, explainstr)breaknews = s[0:n1] + replacestring + s[n2 + 1:]s = news#--------------------------------------------------------picwidth = 0if s.find('#pic_center') >= 0:equid = s.find('=')if equid > 0:equid = s.rindex('=')widthstr = s[equid+1:]endxid = widthstr.find('x)')if endxid > 0:widthstr = widthstr[:endxid]picwidth = int(widthstr)ss = s.split('#')sss1 = ss[0].find('[')sss2 = ss[0].find(']')ss0 = ss[0]ssall = '\r\n' + ss0 + '#pic_center)' + '\r\n'        #+ ss[1].split(')')[1]s = ssallif s.find('<sup>') >= 0 and s.find('</sup>') and s.find('``') >= 0:continueif s.find('@[toc]') >= 0:s = '**文章目录**[toc]\r\n\r\n'if deletecode == 0 and typoraflag == 0 and giteeflag == 0:ssequal = s.split('==')if len(ssequal) >= 2:s = '*'.join(ssequal)#--------------------------------------------------------if indentflag != 0:minlen = 5if len(s) >= minlen:if lastlen <= 1000:lastlen = len(s)flag = 0if s.find('|') > 0: flag = flag + 1if ord(s[0]) < 128:if ord(s[0]) < ord('0') or ord(s[0]) > ord('9'):flag = flag + 1if flag == 0:s = '&emsp;&emsp;' + selse:lastlen = len(s)else: lastlen = 0if bolddeleteflag != 0:if s.find('**') >= 0:s = s.replace('**', '')#--------------------------------------------------------if s.find('^') > 0:sc = s.split('^')if len(sc)%2 == 1:s = ''for a,b in zip(sc[0::2], sc[1::2]):s = s + a + '<sup>' + b + '</sup>'s = s + sc[-1]if s.find('~') > 0 and s.find('~~') < 0:sc = s.split('~')if len(sc)%2 == 1:s = ''for a,b in zip(sc[0::2], sc[1::2]):s = s + a + '<sub>' + b + '</sub>'s = s + sc[-1]#--------------------------------------------------------if len(s) == 0:if len(linknotestr) > 0:s = linknotestrlinknotestr = ''#--------------------------------------------------------s = s.replace('![IMAGE](','![](')#--------------------------------------------------------if giteeflag > 0:startid = s.find('![](')if startid >= 0:endid = s.find('#pic_center')if endid > 0:picurl = s[startid+4:endid]if picwidth == 0: picwidth = 800s = '<p align="center"><img src="%s" width="%d" /></p>\n'%(picurl, picwidth)else:startid = s.find('![▲ ')midid = s.find('](')endid = s.find('#pic_center')if startid >= 0 and midid > 0 and endid > 0:headstr = s[:startid]notestr = s[startid+2:midid]picurl = s[midid+2:endid]if picwidth == 0:s = headstr+'<p align="center"><img src="%s" /><div align="center">%s</div></p><br>'%(picurl, notestr)else:s = headstr+'<p align="center"><img src="%s" width="%d" /><div align="center">%s</div></p><br>'%(picurl, picwidth, notestr)printf(s)if s[0:10] == '# <center>':if s.find('</u>') > 0:ss = '§' + s[2:]else: ss = s[2:]s = '&nbsp;\n<h1 align="center"> %s </h1>\n\n---\n'%ss#--------------------------------------------------------pastestr = pastestr + s + '\n'#------------------------------------------------------------
if len(changecolordict) > 0:for c in changecolordict.keys():fromstr = 'color=%s'%ctostr = 'color=%s'%changecolordict[c]pastestr = pastestr.replace(fromstr, tostr)if len(changefacedict) > 0:for c in changecolordict.keys():fromstr = 'face=%s'%ctostr = 'face=%s'%changecolordict[c]pastestr = pastestr.replace(fromstr, tostr)#------------------------------------------------------------
if linkpicflag > 0:pastestr = pastestr.replace(')\r\n\r\n![',  ')![')pastestr = pastestr.replace(')\r\n\n\r\n![',  ')![')pastestr = pastestr.replace(')\r\n\n\n\r\n![',  ')![')if linkpicflag > 1:pastestr = pastestr.replace(')\r\n\n\n\n\r\n![',  ')![')if linkpicflag > 2:pastestr = pastestr.replace(')\r\n\n\n\n\n\r\n![',  ')![')if linkpicflag > 3:pastestr = pastestr.replace(')\r\n\n\n\n\n\n\r\n![',  ')![')if linkpicflag > 4:pastestr = pastestr.replace(')\r\n\n\n\n\n\n\n\r\n![',  ')![')if linkpicflag > 5:pastestr = pastestr.replace(')\r\n\n\n\n\n\n\n\n\r\n![',  ')![')if linkpicflag > 6:pastestr = pastestr.replace(')\r\n\n\n\n\n\n\n\n\n\r\n![',  ')![')if linkpicflag > 7:pastestr = pastestr.replace(')\r\n\n\n\n\n\n\n\n\n\n\r\n![',  ')![')if linkpicflag > 8:pastestr = pastestr.replace(')\r\n\n\n\n\n\n\n\n\n\n\n\n\r\n![',  ')![')if mergepicflag > 0:pastestr = pastestr.replace(')\r\n\r\n![',  '),![')pastestr = pastestr.replace(')\r\n\n\r\n![',  '),![')pastestr = pastestr.replace(')\r\n\n\n\r\n![',  '),![')if mergepicflag > 1:pastestr = pastestr.replace(')\r\n\n\n\n\r\n![',  '),![')if mergepicflag > 2:pastestr = pastestr.replace(')\r\n\n\n\n\n\r\n![',  '),![')if mergepicflag > 3:pastestr = pastestr.replace(')\r\n\n\n\n\n\n\r\n![',  '),![')if mergepicflag > 4:pastestr = pastestr.replace(')\r\n\n\n\n\n\n\n\r\n![',  '),![')if mergepicflag > 5:pastestr = pastestr.replace(')\r\n\n\n\n\n\n\n\n\r\n![',  '),![')if mergepicflag > 6:pastestr = pastestr.replace(')\r\n\n\n\n\n\n\n\n\n\r\n![',  '),![')if mergepicflag > 7:pastestr = pastestr.replace(')\r\n\n\n\n\n\n\n\n\n\n\r\n![',  '),![')if mergepicflag > 8:pastestr = pastestr.replace(')\r\n\n\n\n\n\n\n\n\n\n\n\n\r\n![',  '),![')mergestr = pastestr.replace(')\r\n\n\n\n\r\n![',  '),![')if mergestr.find('),![') >= 0:strsect = mergestr.split('\n')pastestr = ''for s in strsect:s = s.strip('\r')if s.find('),![') >= 0:pastestr = pastestr + '<%s>\n'%selse: pastestr = pastestr + s + '\n'#------------------------------------------------------------#------------------------------------------------------------
if mdniceflag > 0:clipboard.copy(pastestr)tspsendwindowkey(mdnice_title, "v", control=1)tspfocuswindow(mdnice_title)if questionflag > 0:if clipboardflag == 0:tspsendwindowkey(question_title, "a", control=1)tspsendwindowkey(question_title, "\b")tspsendwindowkey(question_title, "\b")pastestr = pastestr.replace("§", "")clipboard.copy(pastestr)tspsendwindowkey(question_title, "v", control=1)tspfocuswindow(question_title)else:pastestr = pastestr.replace("§", "")clipboard.copy(pastestr)printf("Press CTRL+V to paste string to any window.\a")elif typoraflag > 0:tspsendwindowkey(typora_title, "a", control=1)tspsendwindowkey(typora_title, "\b")tspsendwindowkey(typora_title, "\b")pastestr = pastestr.replace("§", "")clipboard.copy(pastestr)tspsendwindowkey(typora_title, "v", control=1)tspfocuswindow(typora_title)elif giteeflag > 0:if len(csdnpaper) > 0:astr = ''if len(csdnurl) > 0:astr = "\n\n★ 本文来自于CSDN文献:[**%s**](%s) 。\n<br>\n"%(csdnpaper, csdnurl)pastestr = '<h1 align="center"> %s </h1>\n<br>\n\n'%csdnpaper + pastestr + astrelse:if len(csdnurl) > 0:pastestr = pastestr + "\n\n★ 本文来自于CSDN文献:<%s>\n"%csdnurlpastestr = pastestr.replace('<font color=slateblue face=宋体>**``关键词``**', '<br><font color=slateblue face=宋体>**``关键词``**')if len(outfilename) > 0:pastestr = pastestr.replace("§", "")outfile = os.path.join(r'd:\temp', outfilename)with open(outfile, 'wb') as f:f.write(bytes(pastestr, 'utf-8'))printf("Convert markdown to __ipynb__.\a")os.system(r'notedown d:\temp\csdn.md > d:\temp\csdn.ipynb')printf("Output ipynb file to %s.ipynb\a"%outfilename.split('.')[0])else:clipboard.copy(pastestr)tspsendwindowkey(gitee_title, "v", control=1)tspfocuswindow(gitee_title)printf('\a')#------------------------------------------------------------
#        END OF FILE : CD2MD.PY
#============================================================

■ 相关文献链接:

  • What is an IPYNB Files?
  • Jupyter Notebook
  • Python
  • 纯文本文件(plain text)
  • JSON
  • URLs
  • Microsoft Visual Studio Code
  • CSDN - 专业开发者社区
  • 富文本、Markdown
  • 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)
  • 如何利用 nbconvert将 IPYNB文档转换 Markdown文档?
  • 飞桨AI Studio - 人工智能学习与实训社区
  • Convert TXT MARKDOWN to IPYNB
  • Markdown for Jupyter notebooks cheatsheet
  • 如何利用 notedown 完成 ipynb与markdown之间的格式转换?
  • 怎么在CSDN中写微信公众号推文?
  • 墨滴文档
  • MDNICE使得你只需要关注内容
  • 测试录制的电话拨码声音信号在发送过程中的问题

● 相关图表链接:

  • 图1.1.1 IPYNB文档界面
  • 图2.1.1 转换后的ipynb上载BML CodeLab Notebook

如何将CSDN文档转换成IPYNB格式的文档?相关推荐

  1. 【学习笔记】Windows格式文档转换成Unix格式

    [学习笔记]Windows格式文档转换成Unix格式 我们有时候需要将文档格式从Windows格式转换成Unix格式,Windows下换行是\r\n,而Unix下换行是\n,所以只需要将文档中的\r去 ...

  2. html版api文档,将html版API文档转换成chm格式的API文档

    将html版API文档转换成chm格式的API文档并不是一件难事,所需要的只是2个工具及其你要制作的API的javadoc文档,一般去官网下载的话,都会有源代码和javadoc,软件一个是制作chm文 ...

  3. xml 文本转json java_java将XML文档转换成json格式数据

    本篇文章主要介绍了java将XML文档转换成json格式数据的示例,希望能帮助到大家. 功能 将xml文档转换成json格式数据 说明 依赖包: 1. jdom-2.0.2.jar : xml解析工具 ...

  4. 把word文档转换成swf格式

    把word文档转换成swf格式 以前介绍过如何把PPT转换成swf格式,见 方法一 方法二:,也介绍过如何把word转换成pdf格式:点击查看,今天介绍如何把word文档转换成swf文件. 使用swf ...

  5. 如何把PDF文档转换成TXT格式文件

    在日常学习和日常工作中,如何将PDF文件转换为TXT文本? 尽管PDF文件的用户数量正在增加,但是TXT文本格式的接受度将会更高. 毕竟,TXT文本格式是任何设备都可以打开的格式.那么如何将PDF文件 ...

  6. WORD文档转换成PDF格式

    由于一个客户的项目中需要将WORD文档转换成PDF格式,实战教程如下: 需求分析:客户的项目以B/S结构为主,提供一个WORD文件在后台自动转换成PDF,经过实际 测试, 如果该篇WORD文档有100 ...

  7. word文档转换成swf格式文件在网页中用flash显示

    word文档转换成swf格式文件在网页中用flash显示 在OA系统中我们常常需要将上传的word文档在网页中阅览,一般上传后的文档用html的形式查看是会导致排版混乱的,这次我介绍在ASP.NET中 ...

  8. DOC文档转换成WPS格式要怎样操作

    DOC格式转换成WPS格式要怎样操作呢?其实DOC格式就是word文件的一种格式啦!分为doc和docx两种格式.相信大家都会使用PDF转换器将WPS转换为word格式了,那么DOC作为word文档的 ...

  9. 在线将图片转换成PDF格式的文档

    从事美工设计工作,每天的任务是不断收集一些的JPG格式图片当图片收集多了,对后期的选择上十分不便.选择将JPG转为PDF可以便于图片的管理与阅览.众所皆知,PDF全程全程Portable Docume ...

最新文章

  1. python冒泡排序
  2. 剑指offer 算法 (举例让抽象具体化)
  3. 派生类构造函数和析构函数的执行顺序
  4. 韦东山驱动视频笔记——3.字符设备驱动程序之poll机制
  5. Nginx做web服务器linux内核参数优化
  6. junit - no runnable methods
  7. 操作系统:SSH协议知识介绍
  8. 使用mpvue开发小程序
  9. Arraylist线程不安全原因
  10. Android开发笔记(七)初识Drawable
  11. NPM酷库:uuid,生成随机ID
  12. Golang: How to sort struct with multiple sort parameters?
  13. mysql数据库配置步骤,MySQL数据库安装配置步骤详解
  14. Matlab中mat2str函数使用
  15. 制图软件cad-深度了解Mechanical 工具组合
  16. AC敏捷控制器及准入控制技术对比
  17. JAVA消息(第一篇)JMS 很重要!!!!包教包会!!不闹!!!下一篇-AMQP(wire-level protocol)
  18. 分治算法(汉诺塔游戏)
  19. el-select 下拉框多选实现全选
  20. 【opencv实战】哈哈镜

热门文章

  1. 重载运算符作为成员函数还是非成员函数
  2. asp.net core上使用redis探索(1)
  3. Xamarin.android Activity动画切换效果实现
  4. MongoDB 3.4 复制集全量同步改进
  5. 编程人员需知的Windows平台编程的环境设置技巧
  6. 32.突然弹出很多IE窗口怎么办:
  7. WPF的消息机制(三)- WPF内部的5个窗口之处理激活和关闭的消息窗口以及系统资源通知窗口...
  8. 怎样学好网络(1)-正确的定位
  9. 平时用电脑的一些技巧
  10. 部门工作中的“求同存异”法则