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. C++中多态实现的关键——虚函数

    1.多态的作用 在面向对象程序设计中,使用多态能够增强代码的可扩充性,,即程序需要增加或修改部分功能时,只需修改少量代码就能够达到目的,此外多态也能起到精简代码的作用. 而实现多态的关键点,就是虚函数 ...

  2. Test Blog

    计算机实习报告 姓名:王方正 学号:20174314 一.开发任务 题目源自<程序设计实践教程>教材22题,学生基本信息管理.描述略. 二.需求分析 1.说明自己针对这个任务将完成哪些功能 ...

  3. DOM操作节点对象集合

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  4. <if test="type == '0' ">没有进去这个判断的问题

    在MyBatis的mapp文件中的if判断中是这样写的 <if test="type == '0' "> and so1.id = #{unitcode} </i ...

  5. Selenium原理

      from selenium import webdriver:导入webdriver模块 当导入webdriver模块时,会执行\selenium\webdriver目录下的__init__.py ...

  6. OpenGL 编程指南 (2)

    1.OpenGL对共享的边有严格的规定:1)共享边上的像素因为同事被两者所覆盖,因此不可能不受到光照计算的影响: 2)共享边上的像素值,不可能受到多于一个三角形的光照计算的影响. 2.多边形存在正面与 ...

  7. AcWing 892. 台阶-Nim游戏

    #include<iostream> using namespace std; int n; int main() { cin>>n; ; ; i<=n; i++) { ...

  8. 题解【洛谷P2070】刷墙

    题面 将每一次移动的距离进行差分,前缀和判断移动的距离是否\(\geq 2\)即可. #include <bits/stdc++.h> #define itn int #define gI ...

  9. LED Keychain - Widely Used Logo Item

    The LED keychain makes it easy for people to carry their keys with them and carry them with them. It ...

  10. C++学习书籍评价

    1.C++程序设计-现代方法 本书非常适合学习了C语言基础,想跨步到C++学习的同学,前20章都是C基础的回顾,简直不要太简单,后面的课后习题花了半个小时做完了,没怎么出错,嗯,我的C语言基础还是可以 ...