读取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')
这段代码做了以下几件事:
- 打开并读取指定的Markdown文件。
- 使用正则表达式查找所有的代码块(假设每个代码块都用三个反引号
```
包围)。 - 确保输出文件夹存在,如果不存在则创建它。
- 遍历所有匹配的代码块,移除反引号,并将内容保存到新的文本文件中。
在使用此脚本之前,你需要替换 path_to_your_markdown_file.md
和 output_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'
替换为实际的源目录和目标目录路径。