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. Java Day2(下)

    Java learning_Day2(下) 本人学习视频用的是马士兵的,也在这里献上 <链接:https://pan.baidu.com/s/1qKNGJNh0GgvlJnitTJGqgA> ...

  2. linux下载phantomjs记录

    step1:建目录: cd /root mkdir PhantomJS step2:下载phantomjs安装包 可以直接进网址下载到本地后,再传到linux路径,例如phantomjs-1.9.7- ...

  3. jdk1.8的HashMap和ConcurrentHashMap

    原文地址:https://my.oschina.net/pingpangkuangmo/blog/817973 本文针对jdk1.8的ConcurrentHashMap 1 1.8的HashMap设计 ...

  4. Bootstrap框架中radio设置值

    Bootstrap中的radio设置值不能像我们平常给普通radio赋值那样,因为无效. 我们用Bootstrap框架里的radio组件,代码: <div class="radio-l ...

  5. (转)java 虚拟机内存划分

    深入理解java虚拟机(一):java内存区域(内存结构划分)深入理解java虚拟机(二):java内存溢出实战  深入理解java虚拟机(三):String.intern()-字符串常量池深入理解j ...

  6. ubuntu 报错 Unable to locate package

    解决方案参考 https://blog.csdn.net/u010622613/article/details/83017163

  7. testclass面试题

    http://www.testclass.net/interview/selenium/   seleniuim面试题 http://www.testclass.net/interview/inter ...

  8. ping和tracert

    ping命令常用于测试2台主机网络是否连通 TTL的默认值有:64(linux),128(windows),255(路由器) 此例TTL是63所以选用64来减去63等于1,这是说明经过了1个路由器,没 ...

  9. VS 2017 mscorlib.dll 加载元数据时发生严重错误,需要终止调试

    VS 2017 mscorlib.dll 加载元数据时发生严重错误,需要终止调试 C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0. ...

  10. csp 初赛 (不懂的地方)

    11. 有以下结构体说明和变量定义,如图所示,指针 p. q. r 分别指向一个链表中的三个连续结点. struct node {                        int data;st ...