Я разбираю файл YAML с примерно 6500 строк в этом формате:
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 (я думаю, что в Python нет больше альтернатив: Как я могу проанализировать YAML файл в Python).
Просто для тестирования я пишу этот код для анализа моего файла:
import yaml
config_file = "/path/to/file.yaml"
stream = open(config_file, "r")
sensors = yaml.load(stream)
Выполняя команду script с помощью команды time
вместе с script, я получаю это время:
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 трудно разбирать? (возможно, первый)
EDIT:
Я добавляю еще один пример с ruby и YAML:
require 'yaml'
sensors = YAML.load_file('/path/to/file.yaml')
И время исполнения хорошее! (или, по крайней мере, не так плохо, как пример PyYAML):
real 0m0.278s
user 0m0.240s
sys 0m0.032s