如何将CSDN文档转换成IPYNB格式的文档?
简 介: ※IPYNB格式的文档可以很方便在Jupyter Notebook环境内方便研究人员对于算法、数据进行操作。Markdown文本则便于形成各种网络文档。本文介绍了利用notedown实现将CSDN中的Markdown文件转换成IPYNB文档。利用它可以方便对于CSDN中的研究文档进一步实验。
关键词
: CSDN,Markdown,IPYNB,NOTEDOWN
Contents
§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 = 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] = '   ' + 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] = '  ' + csdnstrsect[id-1] + '<br>'else: csdnstrsect[id-1] = '  ● ' + csdnstrsect[id-1] + '<br>'csdnstrsect[id] = '   ' + s[2:] + '<br>'emsprtflag = 1#------------------------------------------------------------
for s in csdnstrsect:# Get rid all the space line offif keepnbspflag == 0 or nbspcount == 0:if s.find(' ') >= 0:nbspcount += 1continueif s.find(' ') >= 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 \r\n' + s[fontend+len('</font>'):]if deletechapterflag > 0:if s.find('>§<') > 0:s = s.replace('>§<', '><')if s.find("  ") == 0:if s.find("   ") < 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 = '  ' + 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 = ' \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格式的文档?相关推荐
- 【学习笔记】Windows格式文档转换成Unix格式
[学习笔记]Windows格式文档转换成Unix格式 我们有时候需要将文档格式从Windows格式转换成Unix格式,Windows下换行是\r\n,而Unix下换行是\n,所以只需要将文档中的\r去 ...
- html版api文档,将html版API文档转换成chm格式的API文档
将html版API文档转换成chm格式的API文档并不是一件难事,所需要的只是2个工具及其你要制作的API的javadoc文档,一般去官网下载的话,都会有源代码和javadoc,软件一个是制作chm文 ...
- xml 文本转json java_java将XML文档转换成json格式数据
本篇文章主要介绍了java将XML文档转换成json格式数据的示例,希望能帮助到大家. 功能 将xml文档转换成json格式数据 说明 依赖包: 1. jdom-2.0.2.jar : xml解析工具 ...
- 把word文档转换成swf格式
把word文档转换成swf格式 以前介绍过如何把PPT转换成swf格式,见 方法一 方法二:,也介绍过如何把word转换成pdf格式:点击查看,今天介绍如何把word文档转换成swf文件. 使用swf ...
- 如何把PDF文档转换成TXT格式文件
在日常学习和日常工作中,如何将PDF文件转换为TXT文本? 尽管PDF文件的用户数量正在增加,但是TXT文本格式的接受度将会更高. 毕竟,TXT文本格式是任何设备都可以打开的格式.那么如何将PDF文件 ...
- WORD文档转换成PDF格式
由于一个客户的项目中需要将WORD文档转换成PDF格式,实战教程如下: 需求分析:客户的项目以B/S结构为主,提供一个WORD文件在后台自动转换成PDF,经过实际 测试, 如果该篇WORD文档有100 ...
- word文档转换成swf格式文件在网页中用flash显示
word文档转换成swf格式文件在网页中用flash显示 在OA系统中我们常常需要将上传的word文档在网页中阅览,一般上传后的文档用html的形式查看是会导致排版混乱的,这次我介绍在ASP.NET中 ...
- DOC文档转换成WPS格式要怎样操作
DOC格式转换成WPS格式要怎样操作呢?其实DOC格式就是word文件的一种格式啦!分为doc和docx两种格式.相信大家都会使用PDF转换器将WPS转换为word格式了,那么DOC作为word文档的 ...
- 在线将图片转换成PDF格式的文档
从事美工设计工作,每天的任务是不断收集一些的JPG格式图片当图片收集多了,对后期的选择上十分不便.选择将JPG转为PDF可以便于图片的管理与阅览.众所皆知,PDF全程全程Portable Docume ...
最新文章
- python冒泡排序
- 剑指offer 算法 (举例让抽象具体化)
- 派生类构造函数和析构函数的执行顺序
- 韦东山驱动视频笔记——3.字符设备驱动程序之poll机制
- Nginx做web服务器linux内核参数优化
- junit - no runnable methods
- 操作系统:SSH协议知识介绍
- 使用mpvue开发小程序
- Arraylist线程不安全原因
- Android开发笔记(七)初识Drawable
- NPM酷库:uuid,生成随机ID
- Golang: How to sort struct with multiple sort parameters?
- mysql数据库配置步骤,MySQL数据库安装配置步骤详解
- Matlab中mat2str函数使用
- 制图软件cad-深度了解Mechanical 工具组合
- AC敏捷控制器及准入控制技术对比
- JAVA消息(第一篇)JMS 很重要!!!!包教包会!!不闹!!!下一篇-AMQP(wire-level protocol)
- 分治算法(汉诺塔游戏)
- el-select 下拉框多选实现全选
- 【opencv实战】哈哈镜
热门文章
- 重载运算符作为成员函数还是非成员函数
- asp.net core上使用redis探索(1)
- Xamarin.android Activity动画切换效果实现
- MongoDB 3.4 复制集全量同步改进
- 编程人员需知的Windows平台编程的环境设置技巧
- 32.突然弹出很多IE窗口怎么办:
- WPF的消息机制(三)- WPF内部的5个窗口之处理激活和关闭的消息窗口以及系统资源通知窗口...
- 怎样学好网络(1)-正确的定位
- 平时用电脑的一些技巧
- 部门工作中的“求同存异”法则