【问题标题】:Get the Last Element in A Large JSON file using Python使用 Python 获取大型 JSON 文件中的最后一个元素
【发布时间】:2020-12-25 11:31:02
【问题描述】:
  1. 我想获取 JSON 文件中的最后一个元素
  2. 这个文件很大,所以我不想把它加载到内存中(使用json.loads)
  3. 很高兴使用 ijson 或 jsonparser 之类的东西,但不知道如何使用这些解析器。

假设我的 JSON 文件如下所示:

{
"1000045901": "John",
"1000045902": "Ben"
}

我想编写 python 代码来帮助我获取最后一项 ("1000045902": "Ben") -- 包括它的键和它的值 -- 所有 没有将文件加载到内存中

我最接近的方法是使用 ijson:

import ijson

key = '-'

with open('customerAccounts.json', 'rb') as file:
  for prefix, event, value in ijson.parse(file):
    if prefix == '' and event == 'end_map'
     print ([key, value][-1])

然而,我的输出返回 end_map 值,即None

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    应该这样做:

    import ijson
    
    with open('customerAccounts.json', 'rb') as file:
      for key, value in ijson.kvitems(file, ''):
        pass
      print(key, value)
    

    keyvalue 是迭代过程中的最后一个值。还有其他方法可以可能更快地从迭代中获取最新值(例如,使用大小为 1 的双端队列),但应该这样做。

    【讨论】:

      【解决方案2】:

      我希望这会有所帮助

      with open('output.txt', 'r') as f:
          print(f.read().splitlines()[-2])
      

      这样你就不会浪费时间来解析 json。得到最后一行后,您可以解析您的数据。如果我在这里展示它:

      {
      "1000045901": "John",
      "1000045941": "Johns",
      "1000045921": "Johnsd", # => -3
      "1000045902": "Ben" # => -2
      } # => -1
      

      信用:Same question

      【讨论】:

      • 感谢法希德。这看起来可能会奏效。也会给它一个简短的。
      • 我应用了您想要的更改。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 2016-09-29
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      相关资源
      最近更新 更多