我在使用Ruby读取大型JSON文件(2.9GB)时遇到问题。我正在使用此代码
json_file = File.read(filename)
results = JSON.parse(json_file)
当我尝试读取文件时,出现错误:
Errno::EINVAL: Invalid argument - <filename>
我已经用较小的文件测试了相同的代码,并且工作正常。为了验证文件是否正确写入,我尝试使用python读取它,并且可以正常工作。
JSON.parse的文件大小是否有限制?如果是这样,您能推荐一个替代方法吗?
我一直在msgpack
寻找减小文件大小的方法,但不幸的是,我无法安装gems,这使我受到了限制。
这是的限制IO.read
。
您可以将文件分成较小的部分(例如1 GB),然后分别阅读:
dirname = File.dirname(filename)
`split -b 1024m #{filename} #{filename}.parts.`
Dir.chdir(dirname)
parts = Dir["#{filename}.parts.*"]
json = ''
parts.each do |partname|
json += File.read(partname)
File.delete(partname)
end
results = JSON.parse(json)
请耐心等待,这可能需要一段时间。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句