跳到主要内容 Python 文件操作:Markdown 格式处理 | 极客日志
Python
Python 文件操作:Markdown 格式处理 本文介绍 Markdown 格式特点及在 Python 中的操作。涵盖使用标准库生成 Markdown 表格、标题与代码块,利用第三方库(markdown、pandas)进行转换与生成,以及通过 BeautifulSoup 或正则表达式解析 Markdown 内容并提取数据进行分析。适合文档化与数据处理场景。
Markdown 是一种轻量级标记语言,用于以纯文本形式编写格式化文档。
它使用简洁的符号表示标题、列表、表格、链接、代码块等结构,易于阅读与编辑,同时可通过渲染生成 HTML、PDF、幻灯片等格式。
Markdown 广泛应用于技术文档、博客、GitHub README、笔记管理以及学术写作等场景。
一、Markdown 格式特点
Markdown 文件扩展名通常为 .md 或 .markdown。
主要特点:
纯文本:文件内容可直接在任何文本编辑器中查看。
可读性强:即使不渲染,也能理解文档结构。
轻量化标记:使用符号表示格式,如 # 表示标题,* 或 - 表示列表。
可扩展:支持表格、脚注、数学公式(需扩展)、代码高亮等。
跨平台:兼容 Git、博客平台、文档生成器等。
示例 Markdown 内容:
| ID | Name | Score |
|----|-------|-------|
| | Alice | |
| | Bob | |
| | Carol | |
- 高分学生:成绩 >=
- 平均分:
> 注:Markdown 文件支持引用、列表、表格及代码块。
1
95
2
88
3
90
90
91.0
该示例展示了 Markdown 的基本语法:标题、表格、列表与引用。
二、在 Python 中表示 Markdown 数据
(1)使用字符串与内存文件对象 当我们想在内存中操作 Markdown,而不立即写入磁盘时,可使用 io.StringIO。
from io import StringIO
md_text = """
# 学生成绩表
| ID | Name | Score |
|----|-------|-------|
| 1 | Alice | 95 |
| 2 | Bob | 88 |
| 3 | Carol | 90 |
"""
buf = StringIO(md_text)
print (buf.read())
StringIO 适合测试、临时存储或处理网络请求中的 Markdown 内容。
(2)使用列表/字典在内存中表示表格数据 在生成 Markdown 表格前,通常先在内存中准备数据:
students = [
{"id" : 1 , "name" : "Alice" , "score" : 95 },
{"id" : 2 , "name" : "Bob" , "score" : 88 },
{"id" : 3 , "name" : "Carol" , "score" : 90 },
]
这种结构便于程序化生成 Markdown 表格或列表。
三、使用 Python 标准库生成 Markdown 虽然 Python 标准库没有专门的 Markdown 模块,但可以直接通过字符串操作生成 Markdown 文件。
(1)生成 Markdown 表格 students = [
{"id" : 1 , "name" : "Alice" , "score" : 95 },
{"id" : 2 , "name" : "Bob" , "score" : 88 },
{"id" : 3 , "name" : "Carol" , "score" : 90 },
]
md_lines = ["| ID | Name | Score |" , "|----|------|-------|" ]
for s in students:
md_lines.append(f"| {s['id' ]} | {s['name' ]} | {s['score' ]} |" )
with open ("students.md" , "w" , encoding="utf-8" ) as f:
f.write("\n" .join(md_lines))
print ("students.md 文件已保存。" )
| ID | Name | Score |
|
| 1 | Alice | 95 |
| 2 | Bob | 88 |
| 3 | Carol | 90 |
(2)生成标题、列表与代码块 students = [
{"id" : 1 , "name" : "Alice" , "score" : 95 },
{"id" : 2 , "name" : "Bob" , "score" : 88 },
{"id" : 3 , "name" : "Carol" , "score" : 90 },
]
md_lines = []
md_lines.append("# 学生成绩分析" )
top_students = [s for s in students if s["score" ] >= 90 ]
md_lines.append("- 高分学生:" )
for s in top_students:
md_lines.append(f" - {s['name' ]} :{s['score' ]} " )
md_lines.append("\n```python" )
md_lines.append("print('Hello, Markdown!')" )
md_lines.append("```" )
with open ("analysis.md" , "w" , encoding="utf-8" ) as f:
f.write("\n" .join(md_lines))
print ("analysis.md 文件已保存。" )
生成文件可直接渲染为带列表和代码块的 Markdown 文档。
四、使用第三方库处理 Markdown
(1)将 Markdown 转换为 HTML import markdown
with open ("students.md" , "r" , encoding="utf-8" ) as f:
md_content = f.read()
html_content = markdown.markdown(md_content)
with open ("students.html" , "w" , encoding="utf-8" ) as f:
f.write(html_content)
print ("students.html 已生成,可在浏览器中查看。" )
说明:markdown 库支持表格、代码块、标题和列表渲染为 HTML,方便展示。
(2)使用 pandas 直接生成 Markdown 表格 import pandas as pd
df = pd.DataFrame(students)
md_table = df.to_markdown(index=False )
print (md_table)
with open ("students_table.md" , "w" , encoding="utf-8" ) as f:
f.write(md_table)
| ID | Name | Score |
|
| 1 | Alice | 95 |
| 2 | Bob | 88 |
| 3 | Carol | 90 |
pandas to_markdown 方法可快速将 DataFrame 输出为 Markdown 表格。
(3)案例:Markdown 文件生成与分析 以下示例展示从内存数据 → Markdown 表格 → HTML 渲染 → 保存文件的完整流程。
import pandas as pd
import markdown
students = [
{"id" : 1 , "name" : "Alice" , "score" : 95 },
{"id" : 2 , "name" : "Bob" , "score" : 88 },
{"id" : 3 , "name" : "Carol" , "score" : 90 },
{"id" : 4 , "name" : "David" , "score" : 70 },
]
df = pd.DataFrame(students)
top_students = df[df["score" ] >= 90 ]
md_lines = ["# 高分学生表" , top_students.to_markdown(index=False )]
with open ("top_students.md" , "w" , encoding="utf-8" ) as f:
f.write("\n" .join(md_lines))
with open ("top_students.md" , "r" , encoding="utf-8" ) as f:
md_content = f.read()
html_content = markdown.markdown(md_content)
with open ("top_students.html" , "w" , encoding="utf-8" ) as f:
f.write(html_content)
print ("top_students.md 与 top_students.html 已生成。" )
| id | Name | score |
|------|-------|---------|
| 1 | Alice | 95 |
| 3 | Carol | 90 |
五、解析 Markdown 文件并提取内容 在某些场景下,我们需要读取并解析 Markdown 内容,将标题、列表、表格或代码块转换为 Python 数据结构,以便进一步分析。
(1)使用 markdown + BeautifulSoup 提取 HTML 内容 import markdown
from bs4 import BeautifulSoup
with open ("top_students.md" , "r" , encoding="utf-8" ) as f:
md_content = f.read()
html_content = markdown.markdown(md_content)
soup = BeautifulSoup(html_content, "html.parser" )
title = soup.find(["h1" , "h2" , "h3" ])
print ("标题:" , title.text)
table = soup.find("table" )
rows = []
for tr in table.find_all("tr" ):
cells = [td.get_text(strip=True ) for td in tr.find_all(["th" , "td" ])]
rows.append(cells)
print ("表格内容:" )
for r in rows:
print (r)
标题:高分学生表
表格内容:
['id' , 'Name' , 'score' ]
['1' , 'Alice' , '95' ]
['3' , 'Carol' , '90' ]
(2)使用正则表达式(re 标准库)提取表格内容 import re
with open ("top_students.md" , "r" , encoding="utf-8" ) as f:
md_content = f.read()
lines = md_content.splitlines()
table_rows = []
for line in lines:
if "|" in line and not re.match (r"^\s*#|^-{2,}" , line):
cells = [cell.strip() for cell in line.strip("|" ).split("|" )]
table_rows.append(cells)
print ("解析表格:" )
for row in table_rows:
print (row)
正则方法适合简单表格,但不支持嵌套或复杂 Markdown 结构。
对于多级列表、代码块或引用,推荐 HTML 渲染 + BeautifulSoup 方法。
(3)案例:Markdown 表格 → Python 数据 → 数据分析 import pandas as pd
import markdown
from bs4 import BeautifulSoup
with open ("top_students.md" , "r" , encoding="utf-8" ) as f:
md_content = f.read()
html_content = markdown.markdown(md_content)
soup = BeautifulSoup(html_content, "html.parser" )
table = soup.find("table" )
rows = []
for tr in table.find_all("tr" ):
cells = [td.get_text(strip=True ) for td in tr.find_all(["th" , "td" ])]
rows.append(cells)
df = pd.DataFrame(rows[1 :], columns=rows[0 ])
df["score" ] = df["score" ].astype(int )
avg_score = df["score" ].mean()
print (df)
print (f"平均分:{avg_score:.1 f} " )
id Name score
0 1 Alice 95
1 3 Carol 90
平均分:92.5
小结 Markdown 是轻量级、可读性强、跨平台的文档格式。Python 标准库通过字符串操作即可生成 Markdown 文件。
第三方库 markdown 可将 Markdown 渲染为 HTML,方便展示和解析。pandas to_markdown 方法可快速生成 Markdown 表格。
综合流程包括:生成 Markdown → 渲染/解析 → 转换数据结构 → 数据分析 → 输出结果,适合文档化与数据处理相结合的场景。
微信扫一扫,关注极客日志 微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具 curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown 转 HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
HTML 转 Markdown 将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
JSON 压缩 通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online