【办公自动化】批量将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 文件相同。

posted @ 2024-02-25 08:04  木头左  阅读(93)  评论(0编辑  收藏  举报