通过php处理大型yaml文件
我需要处理一个巨大的yaml文件(450MB),以获取数据库中的数据。因此,我尝试使用“间谍”。但是文件太大了 每一章都有一行通过php处理大型yaml文件,php,yaml,Php,Yaml,我需要处理一个巨大的yaml文件(450MB),以获取数据库中的数据。因此,我尝试使用“间谍”。但是文件太大了 每一章都有一行--!de.db.net,db::Util::M10lDocument。我需要每一章的内容作为一个数组。因此,我尝试使用spyc。但是完整的文件太大了。我不知道如何分割这些章节 是否可以逐块读取完整的文件 有人知道如何使用那个大文件吗?--是YAML流的首选。使用将文件作为流处理的YAML解析器应该允许您以文档大小的块处理文件,只要每个文档足够小,可以容纳在可用内存中 提
--!de.db.net,db::Util::M10lDocument
。我需要每一章的内容作为一个数组。因此,我尝试使用spyc。但是完整的文件太大了。我不知道如何分割这些章节
是否可以逐块读取完整的文件
有人知道如何使用那个大文件吗?--
是YAML流的首选。使用将文件作为流处理的YAML解析器应该允许您以文档大小的块处理文件,只要每个文档足够小,可以容纳在可用内存中
提供的功能包括从文档流中解析单个文档的能力。没有内置的方法来迭代文档(例如foreach
support),但是您可以实现自己的循环,当yaml\u parse\u file
返回false
指示未找到请求的文档时,该循环会获取顺序文档并停止
<?php
$docNum = 0;
while (false !== ($doc = yaml_parse_file('example.yaml', $docNum))) {
var_dump($doc);
$docNum++;
}
如果没有内容示例,很难说。从理论上讲,YAML格式应该可以通过逐行进行分解并在某些事件(例如,新文档或新标量)时进行截断,从而使分解变得相当简单。如果章节足够小,您可以简单地使用FGET,直到找到新章节的开头,然后解析单个章节。是的,章节足够小,但我不知道如何像你描述的那样解析这一章。据我所知,spyc只读取一个文件,这个文件太大了。我对另一个解析器持开放态度。如果你能为你描述的解决方案写一个例子,我将非常感激。