我需要处理一个巨大的yaml文件 - 这是450 MB - 来获取数据库中的数据。因此我尝试使用“spyc”。但文件太大了。
每一章都有--- !de.db.net,DB::Util::M10lDocument
行。我需要每章的内容作为一个数组。因此我尝试使用spyc。但是完整的文件太大了。我不知道如何拆分这些章节。
是否可以逐块读取完整文件?
有没有人知道如何使用这个大文件?
答案 0 :(得分:0)
---
是YAML流的document boundary marker。使用将文件作为流处理的YAML解析器应允许您以文档大小的块处理文件,只要每个文档足够小以适合可用内存。
yaml_parse_file
提供的yaml PECL extension功能包括从文档流中解析单个文档的功能。没有内置方法来迭代文档(例如foreach
支持),但是您可以实现自己的循环来获取顺序文档,并在yaml_parse_file
返回false
时停止指示所请求的文档没找到。
<?php
$docNum = 0;
while (false !== ($doc = yaml_parse_file('example.yaml', $docNum))) {
var_dump($doc);
$docNum++;
}