import sys
import os
import time
import reheadline = ['##','###','####','#####','######']
title_sign_list = []
"""用于判断标题产生环境"""
titles_added_number = []
"""保存嵌入了编号的标题,用于产生新编号"""
is_continue = 'n'
suf = '.'"""给某一行添加编号"""
def add_number_for_line(line_which_is_title,title_sign):global sufglobal is_continueglobal title_sign_listglobal titles_added_numbertitle_sign_list.append(title_sign)if len(title_sign_list) == 1:#如果line_which_is_title是第一个标题titles_added_number.append(line_which_is_title.replace(title_sign + ' ',title_sign + ' 1. '))return titles_added_number[0]else:#当标题级别为一级(需要标号为1.,2.,3.,...)for title in titles_added_number[::-1]:number = title.lstrip().split(' ')[1]sign = title.lstrip().split(' ')[0]if len(number) == 2 and number.count('.') == 1:#如果发现一级标题(序号为1.,2.,3.,...)if len(title_sign) == len(sign):#如果line_which_is_title是一级标题(与发现的一级标题title级别相同)titles_added_number.append(line_which_is_title.replace(title_sign + ' ',title_sign + ' ' + str(int(number[:-1]) + 1) + '. '))return titles_added_number[-1]elif len(title_sign) < len(sign):#如果line_which_is_title是一级标题(比发现的第一个一级标题级别更高)if is_continue != 'y':print('Markdown文件中的:\n' + title.strip() + '或\n' + line_which_is_title + "\n不规范\n建议将Markdown文件中的标题分级、规范地写好后再继续")is_continue = input('是否忽略此类警告并继续?(y/n)')if is_continue.strip().lower() == 'y':titles_added_number.append(line_which_is_title.replace(title_sign + ' ',title_sign + ' ' + str(int(number[:-1]) + 1) + '. '))return titles_added_number[-1]elif is_continue.strip().lower() == 'n':os._exit(0)else:print('接收到y/n以外的输入,默认退出')os._exit(0)else:break#当标题级别不是一级(序号不是1.,2.,3.,...)number = titles_added_number[-1].lstrip().split(' ')[1]if len(number) == 2 and number.count('.') == 1:#如果line_which_is_title的上一级标题为一级标题(序号为1.,2.,3.,...)titles_added_number.append(line_which_is_title.replace(title_sign + ' ',title_sign + ' ' + number + '1' + suf + ' '))return titles_added_number[-1]elif len(title_sign_list[-1]) > len(title_sign_list[-2]):#如果line_which_is_title的上一个标题比它更高number = re.search('(.*\.\d+)[^\d]?$', number).group(1)titles_added_number.append(line_which_is_title.replace(title_sign + ' ',title_sign + ' ' + number + '.1' + suf + ' '))return titles_added_number[-1]elif len(title_sign_list[-1]) == len(title_sign_list[-2]):#如果line_which_is_title与上一个标题等级别number_suf = re.search('(.*\.)(\d+)[^\d]?$', number).group(2)number_pre = re.search('(.*\.)(\d+)[^\d]?$', number).group(1)titles_added_number.append(line_which_is_title.replace(title_sign + ' ',title_sign + ' ' + number_pre + str(int(number_suf) + 1) + suf + ' '))return titles_added_number[-1]elif len(title_sign_list[-1]) < len(title_sign_list[-2]):#如果line_which_is_title的上一个标题比它更低for title in titles_added_number[::-1]:number = title.lstrip().split(' ')[1]sign = title.lstrip().split(' ')[0]if len(number) == 2 and number.count('.') == 1:#如果先发现一级标题if is_continue != 'y':print('Markdown文件中的:\n' + title.strip() + '\n或\n' + line_which_is_title + "\n不规范\n建议将Markdown文件中的标题分级、规范地写好后再继续")is_continue = input('是否忽略此类警告并继续?(y/n)')if is_continue.strip() == 'y':titles_added_number.append(line_which_is_title.replace(title_sign + ' ',title_sign + ' ' + str(int(number[:-1]) + 1) + '. '))return titles_added_number[-1]elif is_continue.strip() == 'n':os._exit(0)else:print('接收到y/n以外的输入,默认退出')os._exit(0)if len(sign) == len(title_sign):#如果找到等级别标题number_suf = re.search('(.*\.)(\d+)[^\d]?$', number).group(2)number_pre = re.search('(.*\.)(\d+)[^\d]?$', number).group(1)titles_added_number.append(line_which_is_title.replace(title_sign + ' ',title_sign + ' ' + number_pre + str(int(number_suf) + 1) + suf + ' '))return titles_added_number[-1]"""给传入内容添加编号"""
def create_lines_with_number(lines_in_file):for i in range(len(lines_in_file)):title_sign = lines_in_file[i].lstrip().split(' ')if title_sign[0] in headline:lines_in_file[i] = add_number_for_line(lines_in_file[i],title_sign[0])return lines_in_file"""生成添加了标题编号的文件"""
def create_markdown_file_with_number(f,file_name):lines_in_file = []lines_in_file_with_number = []lines_in_file = f.readlines()f.close()lines_in_file_with_number = create_lines_with_number(lines_in_file)# 根据原文件名生成标题添加了序号的文件的文件名markdown_file_with_number = os.getcwd() + '\\' + file_name[::-1].split('.',1)[1][::-1] + '_withNum.md'if not os.path.exists(markdown_file_with_number):with open(markdown_file_with_number, 'w+',encoding='utf-8') as f:for line in lines_in_file_with_number:f.write(line)print('文件已生成')else:if input('文件名重复,是否覆盖 ' + markdown_file_with_number + ' (y/n)').lower() == 'y':with open(markdown_file_with_number, 'w+',encoding='utf-8') as f:for line in lines_in_file_with_number:f.write(line)print('文件已生成')else:print('程序退出')file_name = ''
#如果未传入文件
if len(sys.argv) < 2:path = os.getcwd()file_and_dir = os.listdir(path)md_file = []for item in file_and_dir:if item.split('.')[-1].lower() in ['md','mdown','markdown'] and os.path.isfile(item):md_file.append(item)if len(md_file) != 0:print('当前目录下的Markdown文件:')for file in md_file:print(file)file_name = input('请输入文件名(含后缀)或回车选择第一个文件\n')if not file_name:file_name = md_file[0]else:print('该目录下无Markdown文件,即将退出...')time.sleep(2)os._exit(0)
else:file_name = sys.argv[1]
if os.path.exists(file_name):with open(file_name,'r',encoding='utf-8') as f:create_markdown_file_with_number(f,file_name)
else:msg = "未找到文件"print(msg)

基于Python生成Markdown的标题序号相关推荐

  1. 虫师 Selenium3 基于Python 生成HTML测试报告误区记录

    虫师 Selenium3 基于Python 生成HTML测试报告误区记录 最近在根据<Selenium3自动化测试实战 基于Python语言>这本书自学自动化测试,记录一下在学习过程中碰到 ...

  2. 基于Python生成OPENSEES结构动画

    基于Python生成OPENSEES结构动画 ==== [Github地址]:GitHub - dinochen1983/Opensees_Python: Opensees_Python [下载实例文 ...

  3. python实现日历功能_使用python生成markdown格式的日历

    文章目录 作用: 使用python生成日报中的日历 参考: 代码:# coding=utf-8 def is_leap_year(year): # 判断是否为闰年 if year % 4 == 0 a ...

  4. 基于Python生成铅笔素描图

    基于Python的铅笔素描图 昝道广 概述 前言 思考 彩色图像和铅笔素描对比 素描一刻 爬虫技术分析 代码解析 后记 前言 说到铅笔素描,很多画家用它用的极为精湛.有的细致到跟照片无法区别,简直是墨 ...

  5. python 生成001开始的序号_你知道嘛:Python内建序列通用操作有6种实现方法(赶快收藏)...

    本文内容主要介绍了Python内建序列通用操作6种实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下!!! 数据结构式通过某种方式(例如对元素进 ...

  6. Python 基于Python生成短8位唯一id解决方案

    利用62个可打印字符,通过随机生成32位UUID,由于UUID都为十六进制,所以将UUID分成8组,每4个为一组,然后通过模62(字符0-9,a-z,A-Z总数量62个字符)操作,结果作为索引取出字符 ...

  7. android控制音量加减命令 python_盘点5种基于Python生成的个性化语音方法

    腾讯课堂 | Python网络爬虫与文本分析(戳一戳)~~ 小编在很小的时候就特别喜欢搞怪,模仿别人的声音,尤其是老头老太太模仿的那是一个出神入化. 今天小编就带大家模仿一下个性化的声音,不过不是用小 ...

  8. 基于python爬虫的论文标题_Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】...

    本文实例讲述了Python3实现爬取简书首页文章标题和文章链接的方法.分享给大家供大家参考,具体如下: from urllib import request from bs4 import Beaut ...

  9. 基于python爬虫的论文标题_python爬虫——简单论文标题检索-Go语言中文社区

    有趣的爬虫,独有的意义召唤着我去学习,去尝试.最近有感于每天对于论文的收集,感觉自己的收集速度赶不上论文的更新速度,同时对于自己想找到的论文的收集比较麻烦.因此,学习用python写一个很简单的爬虫, ...

  10. python制作二维码_基于Python生成个性二维码过程详解

    一.问题描述 通过调用MyQR模块来实现生成个人所需二维码. 安装: pip install myqr 二.代码实现 1.普通二维码 from MyQR import myqr # 普通二维码 myq ...

最新文章

  1. Eclipse里的文件搜索
  2. 网易云信安全体系全面升级,获公安部信息安全认证
  3. Request和Response-学习笔记02【请求转发和request共享数据、Request_获取ServletContext、request登录案例】
  4. android studio运行模拟器报错请求超时_GDA关于android脱壳的问题说明
  5. 四元数与复数之间的关系
  6. Python 类的几个内置装饰器—— Staticmethod Classmethod Property
  7. 原理图端口符号_什么是电气原理图和电气接线图,二者区别及绘制要求是什么?...
  8. Android10 mockLocation 模拟定位
  9. [Error] invalid operands of types ‘int‘ and ‘double‘ to binary ‘operator‘
  10. 液晶接口系列——MIPI之DSI协议讲解
  11. 2010年最怪异的25个面试问题,你能回答吗?
  12. ARM指令集【 PUSH \POP】【跳转B\BL\BX\BLX \BXJ】【数据操作LDR\LDRB\LDRH\LDM\STR\STRB\STRH\STM】【移位LSL/LSR/ASL/ASR】
  13. 嵌入式面试(笔试)笔记2
  14. 25 个超棒的 Python 脚本合集(迷你项目)
  15. Ubuntu_DNS配置过程记录
  16. rtsp推流桌面,vlc拉流
  17. QT软件开发中的图标设置与好用的图标网站
  18. Windows卷影复制
  19. 安装编译好的Android镜像到模拟器上 (android 7.0)
  20. Synchro Arts团队获美国电影艺术与科学学院Academy奖

热门文章

  1. 罗永浩的带货直播你看了吗?
  2. FTP-文件传输协议
  3. deepin15.9的linux内核版本,深度Deepin 15.9操作系统首次更新内容
  4. java mpp转图片,Java使用mpxj导入.mpp格式的Project文件(甘特图)
  5. 计算机硬盘有坏道,电脑硬盘有坏道怎么办
  6. U盘引导安装centos7
  7. kali:hydra破解ssh密码
  8. 建行u盾弹不出来_安装建行的网银盾驱动的时候系统检测不出怎么办
  9. html图片的title,图片标签IMG内alt和title属性
  10. 年轻人最好要接触」的东西