当前位置:网站首页>长markdown文档的拆分与合并
长markdown文档的拆分与合并
2022-08-10 16:52:00 【zdlwhereyougo】
目的
使用vscode写长markdown文档时,实时渲染会卡顿,不方便检查,拆分成每一部分比较好检查。
在导出全文的时候,需要保证交叉引用不会出问题,最好再合并成一个文档。万能python实现了这个功能。这个功能不难,参考了站内【羊城迷鹿】的文章,对他的函数进行了改动,更符合我的要求。
from os.path import basename
import re
import os
from urllib.parse import quote
import warnings
warnings.filterwarnings('ignore')
def get_subtitle(content):
# 从md文件中获取h1标题
# 返回日期和索引
pattern = re.compile(r'#{1}(.*?)\n')#正则表达
heads = pattern.findall(content)
# print(heads)
# 防止出现空h1标题
subtitle = [h[1:] for h in heads if h[0] == ' ' and len(h) > 2]#以井号开头
indexes = [content.find(title+'\n')-2 for title in subtitle]
indexes.append(len(content))
return subtitle, indexes
def save_md(path, article):
# 保存分割后的文件
with open(path, 'w+', encoding='utf8') as f:
f.write(article)
def split_and_save_md(filepath,savepath):
file_path,fullflname = os.path.split(filepath)
fname,ext = os.path.splitext(fullflname)
with open(filepath, 'r+', encoding='utf8') as f:
content = f.read()
if not os.path.exists(savepath):
os.mkdir(savepath)
sub_title, indexes = get_subtitle(content)
for i in range(len(sub_title)):
article_path = savepath+'/'+fname+'_'+sub_title[i]+'.md'
if os.path.exists(article_path):
continue
article = content[indexes[i]:indexes[i+1]]
save_md(article_path, article)
# 再定义一个合并文件的
# 合并的代码
def combine_md(filepath,savepath):
md_list = os.listdir(savepath)#列出保存路径下所有的md文件
file_path,fullflname = os.path.split(filepath)
fname,ext = os.path.splitext(fullflname)
fname_split=fname+'_'
contents = []
for md in md_list:
if fname_split in md:
md_file =savepath + '\\' + md
with open(md_file, 'r', encoding='utf-8') as file:
contents.append(file.read() + "\n")
#构造输出路径
output_path=savepath+'\\'+fname+'.md'
with open(output_path,"w", encoding='utf-8') as file:
file.writelines(contents)
#拆分成小部分,更好查看,原始文件所在目录
filepath=r'D:\BaiduNetdiskWorkspace\V6.md'
#拆分后文件所在目录,为了方便,需要新建一个文件夹
savepath=r'D:\BaiduNetdiskWorkspace\newV6t'
#执行拆分命令
split_and_save_md(filepath,savepath)
#执行合并命令
# combine_md(filepath,savepath)
边栏推荐
- nacos服务注册
- shopee API 接入说明
- ROBOTSTXT_OBEY[通俗易懂]
- 重庆新壹汽与一汽集团达成新能源项目战略合作,赋能“碳中和”创造“碳财富”
- 找到一个超级神奇,百试百灵的解决 ModuleNotFoundError: No module named xxx 的方法
- v-on补充:自定义参数传递和事件修饰符
- 解决mpi4py导入报错ImportError: libmpi.so.40: cannot open shared object file: No such file or directory
- C专家编程 第10章 再论指针 10.6 使用指针从函数返回一个数组
- leetcode:1013. 将数组分成和相等的三个部分
- 【QT VS项目名称修改】
猜你喜欢
轮询以及webSocket与socket.io原理
年薪60万+?这份10万字的面试突击宝典涵盖阿里 P5 工程师~P7 所有技术栈
2022 CCF China Open Source Conference Notice (Fourth Round)
数据库注入提权总结(二)
How to realize full backup and incremental backup of MySQL database
【硬件架构的艺术】学习笔记(4)流水线的艺术
数学基础(五)最优化理论(最优化,无约束,有约束,拉格朗日乘子的意义,KKT条件)
什么是开源中的 “胖虎效应”
3 年 CRUD 从 8K 涨到 28K,谁知道这4个月我到底经历了什么?
C语言按位运算符如何使用
随机推荐
干货:服务器网卡组技术原理与实践
符合信创要求的堡垒机有哪些?支持哪些系统?
观测云入选 CNCF 云原生全景图
数学基础(五)最优化理论(最优化,无约束,有约束,拉格朗日乘子的意义,KKT条件)
MySQL数据库完全备份与增量备份怎么实现
从宠爱到嫌弃,蒸发1500亿后,这家明星企业为何陨落?
leetcode:1013. 将数组分成和相等的三个部分
Lua--table操作
李斌带不动的长安新能源高端梦,华为和“宁王”能救吗?
JWT 实现登录认证 + Token 自动续期方案
2022 CCF China Open Source Conference Notice (Fourth Round)
生成树协议(STP---Spanning Tree Protocol)
【随笔】自己看的... 保存
aliexpress API 接入说明
1001 A+B Format(字符串处理)
自适应模糊神经网络与bp神经网络的区别
事务的隔离级别,MySQL的默认隔离级别
Meaning of CDF graph
浅析端口扫描原理
从抖音到火山引擎——看流媒体技术演进和机会