ToolConvoyToolConvoyv2.6
DATA

CSV 转 YAML — 将 CSV 数据转为 YAML

将 CSV 数据转换为 YAML,支持对象列表、列表的列表或单映射输出。全部在浏览器中完成,无上传、无账号、无限制。

● 本地运行 · 零拷贝流水线页面加载以来工具发出的网络请求:0 次

CSV 转 YAML 的适用场景是:目的地是配置文件、部署清单,或需要由人手动编辑的文档。YAML 是 JSON 的超集,加入了注释、多行字符串和更易读的块样式 —— 它也是 Kubernetes 资源、Ansible playbook、GitHub Actions workflow、GitLab CI pipeline、Docker Compose 文件以及绝大多数现代基础设施即代码工具的默认格式。从 CSV 出发的转换很直接:每行变成一个 YAML mapping,整篇文档是这些 mapping 组成的 sequence,得到的文件可以被上述任何工具读取。

CSV 转 YAML 中「不那么显然」的一点是类型推断。CSV 没有类型系统 —— 每个值都是文本 —— 而 YAML 有字符串、数字、布尔和 null。一个内容为 true 的 CSV 单元是歧义的:它可能是 YAML 布尔 true,也可能是 YAML 字符串 \"true\"。工具对常见情形(布尔、整数、浮点、null)做类型推断,其余一律按字符串加引号处理,但推断策略偏保守 —— 一列所有值都是数字时输出为 YAML 数字,只要出现一个非数字值就整列按字符串输出。对于少数推断错的场景(全是数字的 ZIP code 列、以 + 开头的电话号码),工具有「全部按字符串加引号」开关可以彻底关闭类型推断。

最终的交接:如果目的地是 Kubernetes manifest,把输出粘贴到 ConfigMap 的 data 字段、Secret 的 data 字段,或自定义资源定义中。如果目的地是 Ansible,对象列表的输出就是 play 列表项和 inventory groups 的标准形态。如果目的地是 GitHub Actions workflow,YAML 与 workflow 编辑器的导入功能粘贴兼容。如果目的地是自定义配置文件格式,请在转换后对照格式的 schema 校验输出 —— YAML 的类型推断是这类管道中最常见的微妙 bug 来源。

广告

使用方法

  1. 粘贴你的 CSV 数据

    把 CSV 拖入输入区,或加载一个 .csv 文件。工具会自动检测分隔符(逗号、分号、Tab)以及是否存在 UTF-8 BOM。默认情况下第一行被当作表头。

  2. 选择 YAML 结构

    可在「对象列表」(a YAML sequence of mappings,配置类文件最常用的形态)、「列表的列表」(紧凑、不依赖表头)或「单映射」(扁平映射,适合简单的键值导出)之间选择。

  3. 复制或下载 YAML

    把 YAML 复制到剪贴板,或下载为 .yaml 文件。输出是单个自包含的 YAML 文档 —— 可直接粘贴到 Kubernetes manifest、Ansible playbook、GitHub Actions workflow 或 Docker Compose 文件。

常见问题

最常见的 YAML 输出形态是什么?

对象列表(list-of-maps)是表格数据的标准形态。每一行变成一个 YAML mapping(一列对应一个 key),整篇文档是这些 mapping 组成的 sequence。这也是绝大多数工具(Ansible、Kubernetes、GitHub Actions)所期待的表格类输入形态。

如何处理 YAML 特殊字符?

YAML 以空白为语法含义,因此以特殊字符(`-`、`?`、`:`、`#`、`&`、`*`、`!`、`|`、`>`、`'`、`"`、`%`、`@`、`` ` ``)开头的值会被自动加引号。包含换行的字符串使用 YAML `|` 块标量(block scalar)样式。

第一行会作为 key 吗?

会 —— 在对象列表和单映射模式下,第一行被当作表头。key 与表头列名完全一致。如果 CSV 没有表头,可以切换「无表头」选项,改用通用的 `column1`、`column2` 作为 key。

可以在块样式和流样式之间切换吗?

默认是块样式(可读的、带缩进的形式)。切换为流样式后会得到类 JSON 的内联形式(`[{a: 1, b: 2}, {a: 3, b: 4}]`)。块样式更易读、更易 diff;流样式更紧凑。

输出在 Kubernetes 和 Ansible 中有效吗?

有效 —— 对象列表就是两者所期待的形态。对于 Kubernetes,输出是适用于 `ConfigMap` data、`Secret` data 或自定义资源定义的对象列表。对于 Ansible,它对应 play 列表项或 inventory groups。

限制说明

  • 无嵌套结构CSV 是扁平栅格,YAML 输出也是扁平的 —— 每行有相同的 key,无法表示嵌套对象或数组。对于层级数据,请直接以 JSON 或 YAML 为起点。
  • 不支持 YAML anchor 和 alias工具不为重复值生成 YAML anchor(`&name`)或 alias(`*name`)。如果目的地是 Kubernetes manifest,可以考虑把公共值抽到 Helm chart 或 Kustomize overlay 中。
  • 不保留注释CSV 没有注释语法,因此 YAML 输出也没有注释。如果目的地需要文档说明,请在转换后手动在 YAML 文件中添加注释 —— 大多数 YAML 编辑器都支持注释折叠。

平台说明

macOS
命令行场景下,`python3 -c "import csv, yaml; ..."` 可以完成转换。但对于一次性的转换,开一个 Python REPL 不值得时,浏览器工具是更合适的选择。
Windows
PowerShell 的 `Import-Csv` 加上 powershell-yaml 模块的 `ConvertTo-Yaml` 可以完成转换。需要任何 YAML 解析器(Python、Go、Ruby)都能读取的跨平台 YAML 输出时,浏览器工具是合适的选择。
Linux
最接近的命令行工具是 `yq`(mikefarah 版本):`yq -P input.csv` 读取 CSV 并输出 YAML。处理从聊天、邮件或文档页面粘贴过来的内容时,重新输入不现实,浏览器工具是合适的选择。
Web
完全在客户端运行。页面加载后可离线使用。YAML 输出是可移植的 —— 无需任何依赖,可粘贴到任何 YAML 解析器、配置文件或部署清单中。
广告

相关工具

广告