读取Markdown文件,提取其中的代码段,并将每个代码段保存为一个单独的文本文件,下面是一个简单的示例:

import re

def extract_and_save_code_blocks(md_file_path, output_dir):
    with open(md_file_path, 'r', encoding='utf-8') as file:
        content = file.read()
    
    # 使用正则表达式匹配Markdown中的代码块
    code_blocks = re.findall(r'```[^`]*?```', content, re.DOTALL)
    
    # 确保输出目录存在
    import os
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    
    # 保存每个代码块到单独的文件
    for index, block in enumerate(code_blocks):
        block = block.strip('```')  # 移除代码块的```标记
        output_path = os.path.join(output_dir, f'code_block_{index + 1}.txt')
        with open(output_path, 'w', encoding='utf-8') as out_file:
            out_file.write(block)

# 使用示例
# extract_and_save_code_blocks('path_to_your_markdown_file.md', 'output_directory')

这段代码做了以下几件事:

  1. 打开并读取指定的Markdown文件。
  2. 使用正则表达式查找所有的代码块(假设每个代码块都用三个反引号```包围)。
  3. 确保输出文件夹存在,如果不存在则创建它。
  4. 遍历所有匹配的代码块,移除反引号,并将内容保存到新的文本文件中。

在使用此脚本之前,你需要替换 path_to_your_markdown_file.mdoutput_directory 为你的Markdown文件的实际路径和希望保存输出文件的目录路径。


下面,假如文件夹内有多个md文件需要执行同样的操作,那就修改这个Python程序,让它可以遍历指定目录中的所有Markdown文件,并将每个文件中的代码段提取出来,保存到独立的txt文件中。为了避免文件名重复,程序将根据源Markdown文件的名字和代码块的索引生成唯一的文件名

import re
import os

def extract_and_save_code_blocks(source_dir, output_dir):
    # 确保输出目录存在
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    # 遍历目录中的所有文件
    for filename in os.listdir(source_dir):
        if filename.endswith('.md'):
            file_path = os.path.join(source_dir, filename)
            with open(file_path, 'r', encoding='utf-8') as file:
                content = file.read()

            # 使用正则表达式匹配Markdown中的代码块
            code_blocks = re.findall(r'```[^`]*?```', content, re.DOTALL)
            
            # 文件名前缀,去掉.md扩展名
            prefix = os.path.splitext(filename)[0]

            # 保存每个代码块到单独的文件
            for index, block in enumerate(code_blocks):
                block = block.strip('```')  # 移除代码块的```标记
                output_filename = f'{prefix}_code_block_{index + 1}.txt'
                output_path = os.path.join(output_dir, output_filename)
                with open(output_path, 'w', encoding='utf-8') as out_file:
                    out_file.write(block)

# 使用示例
# extract_and_save_code_blocks('source_directory', 'output_directory')

这段代码中,程序首先检查输出目录是否存在,如果不存在,则创建它。接着程序遍历指定目录下的所有文件,对于每个Markdown文件,读取内容并查找其中的代码块。每个代码块将被保存为一个新的txt文件,文件名基于原Markdown文件的名字以及代码块的序号,从而确保文件名的唯一性。

这样可以有效避免不同Markdown文件中相同序号的代码块覆盖彼此的问题。

在使用这个脚本之前,你需要将 'source_directory''output_directory' 替换为实际的源目录和目标目录路径。

04-22 18:41