CSV to Markdown
Převod CSV na Markdown tabulku
Vstup CSV
Výstup Markdown
Co je převod CSV na Markdown tabulku?
Převod CSV na Markdown tabulku je běžný vývojářský úkol. CSV (Comma-Separated Values) ukládá tabulková data jako prostý text, přičemž každý řádek je na vlastní řádce a pole jsou oddělena oddělovacím znakem, jako je čárka nebo tabelátor. Jde o výchozí formát pro export z tabulkových procesorů, SQL klientů a analytických nástrojů. CSV soubory jsou kompaktní a snadno generovatelné, nemají ale žádný zabudovaný způsob řízení toho, jak data vypadají při zobrazení. CSV soubor otevřený v textovém editoru je zeď řetězců oddělených čárkami — čitelná pro stroje, ale obtížně skenovaná lidmi.
Markdown tabulky tento problém s čitelností řeší. Jsou definovány specifikací GitHub Flavored Markdown (GFM) a podporovány GitHub, GitLab, Bitbucket, Notion, Obsidian a generátory statických stránek jako Hugo a Jekyll — kdekoliv je Markdown zpracováván, renderují se jako čisté HTML tabulky. Syntaxe používá svislé čáry pro oddělení sloupců a povinný oddělovací řádek z pomlček mezi záhlavím a tělem tabulky.
Převod CSV na Markdown tabulku znamená obalení každého řádku syntaxí s oddělovači v podobě svislých čar a vložení oddělovacího řádku za záhlaví. První řádek CSV se stane záhlavím tabulky a každý další řádek se stane řádkem těla. Toto je potřeba vždy, když vkládáte strukturovaná data do README, popisu pull requestu, wiki stránky nebo jakéhokoli systému Markdown dokumentace.
Proč použít tento nástroj?
Tento převodník zpracovává CSV přímo v prohlížeči, okamžitě sestavuje výstup Markdown tabulky a nikdy neodesílá vaše data na server.
Případy použití CSV to Markdown
Přehled syntaxe Markdown tabulek
Markdown tabulky se řídí specifikací GitHub Flavored Markdown (GFM). Každá tabulka vyžaduje záhlavní řádek, oddělovací řádek a jeden nebo více řádků těla. Oddělovací řádek řídí zarovnání sloupců.
| Element | Syntaxe | Popis |
|---|---|---|
| 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 vs Markdown tabulka
Oba formáty reprezentují tabulková data jako prostý text. CSV je pro stroje a datové pipeline; Markdown tabulky jsou pro lidi čtoucí dokumentaci.
Příklady kódu
Následující příklady ukazují, jak programově převést CSV na Markdown tabulku v různých jazycích. Každý z nich produkuje platnou GFM tabulku.
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