CSV转Markdown表格
将CSV转换为Markdown表格
CSV输入
Markdown输出
什么是CSV转Markdown转换?
将CSV转换为Markdown表格是开发者的常见任务。CSV(逗号分隔值)以纯文本形式存储表格数据,每行为一条记录,字段之间用逗号或制表符等分隔符隔开。它是电子表格、SQL客户端和数据分析工具的默认导出格式。CSV文件紧凑、易于生成,但本身没有控制数据显示样式的机制。在文本编辑器中打开CSV文件,呈现的是一堆逗号分隔的字符串,机器可读,但人工浏览时十分费力。
Markdown表格解决了可读性问题。它们由GitHub风格Markdown(GFM)规范定义,并受到GitHub、GitLab、Bitbucket、Notion、Obsidian以及Hugo、Jekyll等静态网站生成器的支持——凡是处理Markdown的地方,均可渲染为整洁的HTML表格。语法使用竖线字符分隔列,并在表头行与正文行之间加入一行必填的分隔符(由短划线组成)。
将CSV转换为Markdown表格,就是将每一行包装成竖线分隔的语法,并在表头后插入分隔符行。CSV的第一行成为表头,后续每行成为正文行。每当需要将结构化数据粘贴到README、拉取请求描述、Wiki页面或任何Markdown文档系统时,都需要进行此操作。
为什么使用此工具?
此转换器在浏览器中解析CSV,即时生成Markdown表格输出,数据不会发送至任何服务器。
CSV转Markdown使用场景
Markdown表格语法参考
Markdown表格遵循GitHub风格Markdown(GFM)规范。每张表格都需要表头行、分隔符行以及一行或多行正文行,分隔符行控制列的对齐方式。
| 元素 | 语法 | 说明 |
|---|---|---|
| Column separator | | | Separates each cell within a row |
| Header row | | Name | Age | | First row of the table, defines column names |
| Separator row | | --- | --- | | Required second row; separates header from body |
| Left align | | :--- | | Default alignment — colon on the left side |
| Center align | | :---: | | Colons on both sides of the dashes |
| Right align | | ---: | | Colon on the right side only |
| Escaped pipe | \| | Use backslash to include a literal pipe in cell text |
CSV与Markdown表格对比
两种格式均以纯文本表示表格数据。CSV面向机器和数据流水线;Markdown表格面向阅读文档的人。
代码示例
以下示例展示如何在不同编程语言中以编程方式将CSV转换为Markdown表格,每个示例均可生成有效的GFM表格。
const csv = `name,age,city
Alice,30,Berlin
Bob,25,Tokyo`
const [headerLine, ...rows] = csv.trim().split('\n')
const headers = headerLine.split(',')
const separator = '| ' + headers.map(() => '---').join(' | ') + ' |'
const headerRow = '| ' + headers.join(' | ') + ' |'
const bodyRows = rows.map(row =>
'| ' + row.split(',').join(' | ') + ' |'
)
const markdown = [headerRow, separator, ...bodyRows].join('\n')
// → | name | age | city |
// → | --- | --- | --- |
// → | Alice | 30 | Berlin |
// → | Bob | 25 | Tokyo |import csv
import io
csv_string = """name,age,city
Alice,30,Berlin
Bob,25,Tokyo"""
reader = csv.reader(io.StringIO(csv_string))
rows = list(reader)
headers = rows[0]
lines = []
lines.append('| ' + ' | '.join(headers) + ' |')
lines.append('| ' + ' | '.join('---' for _ in headers) + ' |')
for row in rows[1:]:
lines.append('| ' + ' | '.join(row) + ' |')
print('\n'.join(lines))
# → | name | age | city |
# → | --- | --- | --- |
# → | Alice | 30 | Berlin |
# → | Bob | 25 | Tokyo |
# With pandas (one-liner)
import pandas as pd
df = pd.read_csv(io.StringIO(csv_string))
print(df.to_markdown(index=False))package main
import (
"encoding/csv"
"fmt"
"strings"
)
func main() {
input := "name,age,city\nAlice,30,Berlin\nBob,25,Tokyo"
r := csv.NewReader(strings.NewReader(input))
records, _ := r.ReadAll()
headers := records[0]
var lines []string
lines = append(lines, "| "+strings.Join(headers, " | ")+" |")
sep := make([]string, len(headers))
for i := range sep {
sep[i] = "---"
}
lines = append(lines, "| "+strings.Join(sep, " | ")+" |")
for _, row := range records[1:] {
lines = append(lines, "| "+strings.Join(row, " | ")+" |")
}
fmt.Println(strings.Join(lines, "\n"))
// → | name | age | city |
// → | --- | --- | --- |
// → | Alice | 30 | Berlin |
// → | Bob | 25 | Tokyo |
}# Using Miller (mlr) — convert CSV to Markdown table mlr --icsv --omarkdown cat data.csv # → | name | age | city | # → | --- | --- | --- | # → | Alice | 30 | Berlin | # Using csvtomd (pip install csvtomd) csvtomd data.csv # Using pandas in a one-liner python3 -c " import pandas as pd, sys print(pd.read_csv(sys.argv[1]).to_markdown(index=False)) " data.csv