如何将CSDN文档转换成IPYNB格式的文档?

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将CSDN文档转换成IPYNB格式的文档?相关的知识,希望对你有一定的参考价值。

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

关键词 CSDNMarkdownIPYNBNOTEDOWN

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文件。

(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的程序:

  在博文 如何利用 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 = 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之间的格式转换?

如何将PDF文件转换成word文档格式

如何将jupyter中的.ipynb文件转换成python中的.py文件

如何把XML格式转换成JSON-CSDN论坛

如何将PDF文档转换为CHM格式文档?

如何将word转换成pdf格式的文档