Ruby 并从下载中解析巨大的 JSON 行
Ruby and parsing huge JSON-Lines from download
Ruby 3.1.0
我试图在不破坏内存的情况下解析 JSON 行。我的例程什么也不打印。我想知道我哪里出错了。我打开一个临时文件来保存这个巨大的文件,我认为这是错误 #1。但我不知道如何构建它。然后我尝试将巨大的文件从 Google 复制到我的临时文件,然后一次单步执行该行。我什么都没有...我很困惑。
哦。我想到了。 copy_stream 将文件保留在 EOF。我只需要倒带它就可以使用它。
require "tempfile"
require "open-uri"
require "json"
url = "https://storage.googleapis.com/somehugefile.jsonl"
inventory_file = Tempfile.new
inventory_file.binmode
uri = URI(url)
IO.copy_stream(uri.open, inventory_file)
f = File.foreach(inventory_file)
f.each_entry {|line| puts JSON.parse(line) }
很简单。我不知道 copy_stream 方法将文件指针留在文件末尾。所以我只需要对其进行倒带,一切都按预期进行。
Ruby 3.1.0
我试图在不破坏内存的情况下解析 JSON 行。我的例程什么也不打印。我想知道我哪里出错了。我打开一个临时文件来保存这个巨大的文件,我认为这是错误 #1。但我不知道如何构建它。然后我尝试将巨大的文件从 Google 复制到我的临时文件,然后一次单步执行该行。我什么都没有...我很困惑。
哦。我想到了。 copy_stream 将文件保留在 EOF。我只需要倒带它就可以使用它。
require "tempfile"
require "open-uri"
require "json"
url = "https://storage.googleapis.com/somehugefile.jsonl"
inventory_file = Tempfile.new
inventory_file.binmode
uri = URI(url)
IO.copy_stream(uri.open, inventory_file)
f = File.foreach(inventory_file)
f.each_entry {|line| puts JSON.parse(line) }
很简单。我不知道 copy_stream 方法将文件指针留在文件末尾。所以我只需要对其进行倒带,一切都按预期进行。