【办公自动化】批量将Markdown文件转换为纯文本文件
本文介绍如何将 Markdown 文件转换为纯文本文件。Markdown 是一种轻量级的标记语言,用于编写格式简单的文档。但是,有时候我们需要将 Markdown 文件转换为纯文本文件,以便进行其他处理或直接在浏览器中查看。下面介绍一种简单的方法来实现这个功能。
转成html
要将Markdown文件转换为html文件,可以使用Python的markdown
库。首先确保已经安装了markdown
库,如果没有安装,可以使用以下命令安装:
pip install markdown
然后,可以使用以下代码将Markdown文件转换为纯文本文件:
import markdown
def md_to_txt(md_file, txt_file):
with open(md_file, 'r', encoding='utf-8') as f:
md_content = f.read()
txt_content = markdown.markdown(md_content)
with open(txt_file, 'w', encoding='utf-8') as f:
f.write(txt_content)
md_file = 'example.md' # Markdown文件路径
txt_file = 'example.html' # 转换后的纯文本文件路径
md_to_txt(md_file, txt_file)
将example.md
替换为要转换的Markdown文件的路径,将example.txt
替换为要保存的html文件的路径。
转成txt
如果要去掉链接,只保存纯文本,我们定义了一个函数 md_to_txt()
,它接受两个参数:md_file
是 Markdown 文件的路径,txt_file
是转换后的纯文本文件的路径。函数首先使用 open()
函数读取 Markdown 文件的内容,并将其按行拆分成一个字符串列表 str_list
。然后,它遍历列表中的每一行,忽略包含特定关键字(如 ![
或 https
)的行,并移除特定的文本(如 如下图所示:
)。将处理后的文本添加到 txt_content
变量中,并根据需要更新标题和类别信息,将 txt_content
写入到指定路径下的纯文本文件中,并打印转换完成的消息。
import os
import re
import markdown2 as mdk
def traverse_dir_files(root_dir, ext=None, is_sorted=True):
"""
列出文件夹中的文件, 深度遍历
:param root_dir: 根目录
:param ext: 后缀名
:param is_sorted: 是否排序,耗时较长
:return: [文件路径列表, 文件名称列表]
"""
names_list = []
paths_list = []
for parent, _, fileNames in os.walk(root_dir):
for name in fileNames:
if name.startswith('.'): # 去除隐藏文件
continue
if ext: # 根据后缀名搜索
if name.endswith(tuple(ext)):
names_list.append(name)
paths_list.append(os.path.join(parent, name))
else:
names_list.append(name)
paths_list.append(os.path.join(parent, name))
if not names_list: # 文件夹为空
return paths_list, names_list
# if is_sorted:
# paths_list, names_list = sort_two_list(paths_list, names_list)
print(paths_list)
return paths_list
def remove_code_blocks(text):
return re.sub(r'```(.*?)```', '', text, flags=re.DOTALL)
def md_to_txt(md_file, txt_file):
txt_content = ''
title = os.path.basename(md_file).replace('.md','').strip()
with open(md_file, 'r', encoding='utf-8') as f:
str_list = f.read().splitlines()
for md in str_list:
if '![' in md or 'https' in md:
continue
md = md.replace('如下图所示:', '')
txt_content += md +'
'
if 'title:' in md:
title = md.replace('title:','').strip()
if 'category:' in md:
category = md.replace('category:','').strip()
title = category + '_' + title
os.makedirs(os.path.dirname(txt_file), exist_ok=True) # 如果目录不存在则创建目录
with open(os.path.join(txt_file,title+'.txt'), 'w', encoding='utf-8') as f:
f.write(txt_content)
print("转换完成:%s" % (md_file))
遍历指定目录
定义了一个函数 readlist()
,它用于遍历指定目录下的所有 Markdown 文件,并调用 md_to_txt()
函数进行转换。它接受两个参数:path
是待遍历的目录路径,txt_dir
是转换后的纯文本文件存放的目录路径。函数使用 dir_util.traverse_dir_files()
方法获取目录下所有扩展名为 .md
的文件路径,并存储在 path_list
列表中。然后,它遍历列表中的每个文件路径,并尝试调用 md_to_txt()
函数进行转换。如果转换过程中出现异常,它会打印出错误消息。
def readlist(path, txt_dir):
path_list = dir_util.traverse_dir_files(root_dir=path, ext='.md')
res = []
for path_str in path_list:
try:
md_to_txt(path_str, txt_dir)
except Exception as e:
print(path_str + '---------error-----------')
print(e)
最后,我们可以在 Python 脚本中调用这两个函数来实现 Markdown 到纯文本的转换。例如,假设我们有一个 Markdown 文件 data/tree.md
,我们想将其转换为纯文本文件并保存到 data/txt
目录下,可以这样写代码:
if __name__ == '__main__':
md_file = r'data\' # Markdown文件路径
txt_dir = r'data\txt' # 转换后的纯文本文件存放的目录路径
readlist(md_file, txt_dir)
运行这段代码后,会在 data/txt
目录下生成一个以 tree.md
为文件名的纯文本文件,文本内容与原 Markdown 文件相同。