【发布时间】:2013-08-26 14:24:17
【问题描述】:
我正在解析一个大约 6500 行的 YAML 文件,格式如下:
foo1:
bar1:
blah: { name: "john", age: 123 }
metadata: { whatever1: "whatever", whatever2: "whatever" }
stuff:
thing1:
bluh1: { name: "Doe1", age: 123 }
bluh2: { name: "Doe2", age: 123 }
thing2:
...
thingN:
foo2:
...
fooN:
我只想用PyYAML library 解析它(我认为在Python 中没有其他替代方法:How can I parse a YAML file in Python)。
只是为了测试,我编写了代码来解析我的文件:
import yaml
config_file = "/path/to/file.yaml"
stream = open(config_file, "r")
sensors = yaml.load(stream)
使用time 命令连同我这次得到的脚本一起执行脚本:
real 0m3.906s
user 0m3.672s
sys 0m0.100s
这些价值观似乎真的不太好。我只是想用 JSON 进行相同的测试,只是先将相同的 YAML 文件转换为 JSON:
import json
config_file = "/path/to/file.json"
stream = open(config_file, "r")
sensors = json.load(stream) # We read the yaml config file
但执行时间要好得多:
real 0m0.058s
user 0m0.032s
sys 0m0.008s
为什么 PyYAML 解析 YAML 文件比解析 JSON 文件花费更多时间的主要原因? 是 PyYAML 的问题还是因为 YAML 格式难以解析? (可能是第一个)
编辑:
我添加了另一个使用 ruby 和 YAML 的示例:
require 'yaml'
sensors = YAML.load_file('/path/to/file.yaml')
而且执行时间很好! (或者至少没有 PyYAML 示例那么糟糕):
real 0m0.278s
user 0m0.240s
sys 0m0.032s
【问题讨论】:
-
@moliware 是的,我以前读过那个。但是问题是关于序列化的,答案似乎没有回答我的问题:(
-
经过您的编辑,我明白了。您是否使用正确的选项安装它: $ python setup.py --with-libyaml install
-
是的,我按照这里的说明进行操作:rmcgibbo.github.io/blog/2013/05/23/… 但 LibYAML 没有任何改进。
-
您能否发布您正在使用的 yaml 和 json 数据文件的链接。我想比较两者,看看时间都花在了哪里。