[Automatización de Office] Convierta archivos Markdown en archivos de texto sin formato en lotes

Este artículo explica cómo convertir archivos Markdown en archivos de texto sin formato. Markdown es un lenguaje de marcado ligero para escribir documentos con formato simple. Sin embargo, a veces necesitamos convertir archivos Markdown en archivos de texto sin formato para otro procesamiento o visualización directamente en el navegador. A continuación se muestra una forma sencilla de implementar esta función.

Convertir a HTML

Para convertir archivos Markdown a archivos html, puede utilizar markdownla biblioteca de Python. Primero asegúrese de que la biblioteca esté instalada markdown, si no, puede instalarla usando el siguiente comando:

pip install markdown

Luego, el archivo Markdown se puede convertir en un archivo de texto sin formato usando el siguiente código:

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)

Reemplace example.mdcon la ruta al archivo Markdown que desea convertir y example.txtreemplace con la ruta al archivo html que desea guardar.

Convertir a texto

Si desea eliminar el enlace y guardar solo el texto sin formato, definimos una función que md_to_txt()acepta dos parámetros: md_filela ruta del archivo Markdown y txt_filela ruta del archivo de texto sin formato convertido. La función primero open()lee el contenido del archivo Markdown usando la función y lo divide línea por línea en una lista de cadenas str_list. Luego recorre cada línea de la lista, ignorando las líneas que contienen palabras clave específicas (como ![o https) y eliminando texto específico (como 如下图所示:). Agregue el texto procesado a txt_contentla variable, actualice la información del título y la categoría según sea necesario, escriba txt_contenten un archivo de texto sin formato en la ruta especificada e imprima el mensaje de finalización de la conversión.

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))

Recorrer el directorio especificado

Se define una función readlist(), que se utiliza para recorrer todos los archivos Markdown en el directorio especificado y llamar md_to_txt()a la función para la conversión. Acepta dos parámetros: pathla ruta del directorio a recorrer txt_diry la ruta del directorio donde se almacenan los archivos de texto sin formato convertidos. La función utiliza dir_util.traverse_dir_files()el método para obtener todas las rutas de archivos con la extensión en el directorio .mdy las almacena en path_listla lista. Luego recorre en iteración cada ruta de archivo de la lista e intenta llamar md_to_txt()a la función para convertirlo. Si se produce una excepción durante la conversión, imprimirá un mensaje de error.

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)

Finalmente, podemos llamar a estas dos funciones en el script de Python para convertir Markdown a texto sin formato. Por ejemplo, supongamos que tenemos un archivo Markdown data/tree.mdy queremos convertirlo a un archivo de texto plano y guardarlo en data/txtel directorio. Podemos escribir el código así:

if __name__ == '__main__':
    md_file = r'data\' # Markdown文件路径
    txt_dir = r'data\txt' # 转换后的纯文本文件存放的目录路径
    readlist(md_file, txt_dir)

Después de ejecutar este código, data/txtse generará en el directorio un archivo de texto sin formato tree.mdcon . El contenido del texto es el mismo que el del archivo Markdown original.

Supongo que te gusta

Origin blog.csdn.net/luansj/article/details/132029707
Recomendado
Clasificación