Python で大きな JSON ファイル (~ 2GB) を読み込もうとしています。
次のコードは、小さなファイルではうまく機能しますが、2 行目の MemoryError のため、大きなファイルでは機能しません。
in_file = open(sys.argv[1], 'r')
posts = json.load(in_file)
同様の投稿を見て、ほとんどの人が ijson の使用を提案したので、試してみることにしました。
in_file = open(sys.argv[1], 'r')
posts = list(ijson.parse(in_file))
これは大きなファイルサイズの読み取りを処理しましたが、ijson.parse は json.load のように JSON オブジェクトを返さなかったため、残りのコードは機能しませんでした
TypeError: タプルのインデックスは、str ではなく、整数またはスライスでなければなりません
json.load を使用して「投稿」を出力すると、o/p は通常の JSON のように見えます
[{"Id": "23400089", "PostTypeId": "2", "ParentId": "23113726", "CreationDate": ... etc
ijson.parse を使用した後に「投稿」を出力すると、o/p はハッシュ マップのように見えます
[["", "start_array", null], ["item", "start_map", null],
["item", "map_key", "Id"], ["item.Id", "string ... etc
私の質問:
コードの残りの部分を変更したくないので、ijson.parse(in_file)
使用している場合とまったく同じになるように、o/p を JSON オブジェクトに変換する方法があるかどうか疑問に思っていjson.load(in_file)
ます。