0

次の内容の大きな JSON ファイル db.json (> 100 Mb) があります。

{"sitters": [["9919.html", 3, 8, 19, 47, 120, 129, 359]], "yellow": [["9945.html", 791], 
["9983.html", 1496], ["9984.html", 151]], "four": [["9971.html", 81, 403], ["9991.html", 37], 
["9995.html", 45, 225, 337], ["9975.html", 15], ["9978.html", 100], ["9948.html", 381], 
["9966.html", 228], ...

ここで、キーは単語で、値はファイル名であり、その後にファイル内でその単語が表示されるインデックスが続きます。この JSON ファイルからn個の単語をクエリし、対応するファイル名と位置を取得したいと思います。ファイルサイズが大きい場合にこれを効率的に行う方法について何か考えはありますか? 私は IJSON を見てきましたが、それを機能させることができないようです。私が試してみました:

parser = parse("db.json")                                                             
for prefix, event, value in parser:                                                  
    if event == 'sitters':                                                           
        print value   

しかし、次のエラーが表示されるため、適切に使用する方法がわからない場合があります。

Traceback (most recent call last):
  File "retriever.py", line 43, in <module>
    sys.exit(main())
  File "retriever.py", line 38, in main
    for prefix, event, value in parser:
  File "/usr/local/lib/python2.7/dist-packages/ijson/common.py", line 63, in parse
    for event, value in basic_events:
  File "/usr/local/lib/python2.7/dist-packages/ijson/backends/yajl2.py", line 90, in basic_parse
    buffer = f.read(buf_size)
AttributeError: 'str' object has no attribute 'read'

どんな助けでも大歓迎です!

4

1 に答える 1

4

string 'db.json'この行のファイルの代わりに解析しようとしています'db.json':

parser = parse("db.json")                                                             

エラー メッセージでわかるように、buffer = f.read(buf_size)この行は次の例外をスローします。

AttributeError: 'str' オブジェクトに属性 'read' がありません

ただし、関数parseにはファイルが必要です。

f = open('db.json', 'r')
parser = parse(f)

作業が完了したら閉じます。

f.close()

with次のステートメントを使用して、開閉プロセスを処理することもできます。

with open('db.json') as f:
    parser = parse(f)
    # use your parser and after leaving this block indent you're done
于 2013-05-11T07:50:25.973 に答える