1. 原理

正则匹配对相应字符串进行替换

2. 运行方法

python md_convert.py [a.md, b.md,...] # 转换给定文档



python md_convert.py # 转换目录下所有的md文档

3. 效果

4. 代码

#coding:utf-8

"""
----------------------------------------
description:
md文档格式化处理类
为md文档自动生成标题编号;
如已有编号,更新之;
支持 1-6 级标题;
标题格式:##,###,####,#####,######

如给定参数则转换给定文件;
如未给定参数则转换目录下所有md文档。

author: sss

date:
----------------------------------------
change:

----------------------------------------

"""
__author__ = 'sss'

import os
import sys
import re

# 工具对象
def pr_type(i, info=''):
print(info, i, type(i))

class MdDocProcessing(object):
"""
md文档格式化处理类
为md文档自动生成标题编号;
如已有编号,自动更新;
更新1-6 级标题;
标题格式支持:##,###,####,#####,######

如给定参数则转换给定文件;
如未给定参数则转换目录下所有md文档。

"""
def __init__(self):
pass

def start_processing(self, *ar):
#self._command_check()

doc_list = sys.argv[1:]

if len(doc_list) == 0:
doc_list = [x for x in os.listdir() if x.endswith('.md')]
res = input("将转换以下文档:\n%s\nY(回车)/N?:" % doc_list)
if res in 'yY':
pass
else:
return
#print(doc_list)

for _ in doc_list:
if not _.endswith(r'.md'):
print('参数格式错误: %s '%(_), '\n请输入.md格式文件。')
return

for _ in doc_list:
self.title_style_convert(_)
print("文档转换完成。"%(_, ))

def title_style_convert(self, file_name):
"""
标题自动编号
编号格式为: 1.1.1. 标题
:param file_name:
:return:
"""

title_num_cur = [0]*6

# 匹配正则表达式
reg = r'^((#{2,6})[\s\d\.]{0,})(.*)$'
pattern = re.compile(reg)

# 输出文件对象
res_file = open('_' + file_name, 'w', encoding='utf-8')

with open(file_name, 'r', encoding='utf-8') as fi:
line = fi.readline()
while line:
res = re.match(pattern, line)
if res:
length = len(res.group(2))
title_num_cur, title_str = self._title_nuber_process(title_num_cur, length)
line = res.group(2) + ' ' + title_str + res.group(3) + '\n'

res_file.write(line)
line = fi.readline()
# 关闭输出文件
res_file.close()

#os.rename(file_name, file_name + '.tmp')
# 删除原文件
os.remove(file_name)
# 将输出文件改为原文件名
os.rename('_' + file_name, file_name)
return

def _command_check(self):
#print(sys.argv)
cmd_params = sys.argv[1:]
if len(cmd_params)

python 实现 md文档自动编号的更多相关文章

  1. 使用Python从Markdown文档中自动生成标题导航

    概述 知识与思路 代码实现 概述 Markdown 很适合于技术写作,因为技术写作并不需要花哨的排版和内容, 只要内容生动而严谨,文笔朴实而优美. 为了编写对读者更友好的文章,有必要生成文章的标题导航 ...

  2. Python之文件处理-批量修改md文档内容

    目录 Python之文件处理-批量修改md文档内容 Python之文件处理-批量修改md文档内容 #!/usr/bin/env python # -*- coding:utf-8 -*- import ...

  3. SDWebImage ReadMe.md文档简单说明

    SDWebImage ReadMe.md 文档 附:SDWebImage框架github下载地址:https://github.com/rs/SDWebImage 注1:该文章简单翻译了SDWebIm ...

  4. Word 2010文档自动生成目录和某页插入页码

    一.Word 2010文档自动生成目录 关于Word文档自动生成目录一直是我身边同学们最为难的地方,尤其是毕业论文,经常因为目录问题,被要求修改,而且每次修改完正文后,目录的内容和页码可能都会发生变化 ...

  5. md文档的书写《二》

    对<md文档的书写一>的补充和部分归总 我使用的是Typora,快捷键可能有些片面,没有特殊说明,下文所有快捷键都是Typora编辑器下支持的快捷键,望知晓. 关于标题的书写补充 除了 ( ...

  6. 【技术博客】利用Python将markdown文档转为html文档

    利用Python将markdown文档转为html文档 v1.0 作者:FZK 元素简单的md文件 Python中自带有一个markdown库,你可以直接这样使用 md_file = open(&qu ...

  7. python实用小技能分享,教你如何使用 Python 将 pdf 文档进行 加密 解密

    上次说了怎么将word转换为pdf格式 及 实现批量将word转换为pdf格式(点击这里),这次我又get到一个新技能–使用 Python 将 pdf 文档进行 加密 解密,哈哈哈 希望帮到更多人! ...

  8. md文档使用小技巧

    简介 在日常写readme文档中,可能会遇到一些小问题,此处记录一下md文档编写过程中的一些小技巧. 插入图片 在md文档中插入图片,目前有三种方式,本地导入.网络导入.base64导入. 本地导入 ...

  9. Openstack python api 学习文档 api创建虚拟机

    Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack ...

随机推荐

  1. 如何通过给MM修电脑培养感情

    文章来自网络 在修之前,向MM反复声明,这电脑故障是有硬件和软件之分的,如果是硬件故障,例如显卡风扇不转了,显示器连线老化,显示器分辨率超出显示器指标,等等都会导致黑屏啊,这个我不回家用专门的工具是修 ...

  2. [USACO12FEB] 附近的牛 Nearby Cows - 树形dp,容斥

    给你一棵 \(n\) 个点的树,点带权,对于每个节点求出距离它不超过 \(k\) 的所有节点权值和 \(m_i\) 随便定一个根,设\(f[i][j]\)表示只考虑子树,距离为\(j\)的权值和,\( ...

  3. const真有点烦

    在C++中const代替#define的操作,当定义一个const时必须附一个值给它:const int size = 100;通常C++编译器不为const创建存储空间,相反它把这个定义保存在符号表 ...

  4. format的使用

    v="敬爱可亲的{0},最喜欢在{1}地方干{2}" name1=input("名字>") lang=input("地点>") ...

  5. MySQL启动和停止

    MySQL视为大仓库,关闭的时候有权限有身份都无法进入使用的时候要保持启用状态 方式一: 计算机游击找到“管理”打开 左侧栏目中找到“服务和应用程序”打开 打开服务 找到MySQL...,右击.... ...

  6. Centos7安装python3.6.5

    安装python3.6.5,原来的python2.7.5并存 准备环境: 登录你的linux虚拟机或者云服务器,进入命令行界面如下图: 进入这样的窗口就是远程登录成功,我这里使用的是远程连接工具xsh ...

  7. 找不到getter/setter——没有安装lombok插件

    项目pull后的问题: import lombok.Getter; import lombok.Setter; @Setter @Getter public class ConcreteEntity ...

  8. php设计模式之装饰模式实例代码

    <?php header("Content-type:text/html;charset=utf-8"); /** * 文章编辑类 */ class Article { pr ...

  9. JAVA 注解教程(三)注解的属性

    简介 注解的属性也叫做成员变量,注解只有成员变量,没有方法.注解的成员变量在注解的定义中以“无形参的方法”形式来声明,其方法名定义了该成员变量的名字,其返回值定义了该成员变量的类型 实例 @Targe ...

  10. MyEclipse把普通的项目变成hibernate项目