本文简要介绍一下生物信息学中保存键值对的最佳实践。
键值对是常见的一种数据结构:Python 中的字典,Perl 中是 Hash 等。如何将键值对保存到文件中,除了序列化方法,如 Python 的 pickle 模块,常见的还有保存为 INI、json 或 YAML 文件。
我的最佳实践是:
数据结构比较简单的情况下,用 json 或 YAML,如果比较复杂,使用更优雅和强大的 YAMl 格式。
先看一个 json 文件,长下面这样:
{
"parameters": [
{ "name":"baidu" , "url":"www.baidu.com" },
{ "name":"google" , "url":"www.google.com" },
]
}
同样的内容,YAML 格式为:
parameters:
- name: baidu
url: www.baidu.com
- name: google
url: www.google.com
可以看到,json 更严谨,但略显繁琐,没有 YAML 简洁优雅。这里简要介绍一下 YAML 文件格式。
键和值不需要分别使用引号,以及允许'#'表示注释,是 YAML 与 json 的两个非常不一样的点,这使得 YAML 更为优雅和强大。
YAML 支持 3 种基本的数据类型:
对象示例:
name: baidu
键之后是一个“:”号,然后一个英文空格,接着是值。
数组示例:
Person:
- one
- two
- three
这跟 Markdown 语法的列表一样:每行一条记录,每条记录以一个减号“-”开头,接着是一个空格,然后是记录内容。
标量示例:
cpu: 1
mem: 4
基本的,不可再分割的值就是标量,如 cpu 后面的 1,可以表示 1 条线程,mem 后面的 4,可以表示 4G 内存。
当然,由基本的数据类型可以组成复杂的数据类型,本文不展开说。
用 INI 保存键值对感觉存在于远古时代,改用 json 或 YAML 吧。