13

mongodb にロードする必要がある json ファイル ( ~3Gb ) があります。かなりの数の json キーに . (ドット)、mongodb への読み込みが失敗します。私はjsonファイルをロードし、その過程でキー名を編集したい.ドットを空のスペースに置き換えたい. 次の python コードを使用する

import json

def RemoveDotKey(dataPart):
    for key in dataPart.iterkeys():
        new_key = key.replace(".","")
        if new_key != key:
            newDataPart = deepcopy(dataPart)
            newDataPart[new_key] = newDataPart[key]
            del newDataPart[key]
            return newDataPart
    return dataPart

new_json = json.loads(data, object_hook=RemoveDotKey) 

RemoveDotKey と呼ばれる object_hook は、キーにドットが含まれている場合、すべてのキーを反復処理し、コピーを作成し、ドットをスペースに置き換えて、コピーを返します。dataPart のキーを反復処理し、同時にキーと値のペアを挿入/削除できるかどうかわからないため、dataPart のコピーを作成しました。

ここにエラーがあるようです。ドットが含まれるすべての json キーが編集されていません。json.load がどのように機能するかはよくわかりません。また、Pythonは初めてです(使用して1週間未満です)

4

1 に答える 1

22

あなたはほとんどそれを持っていました:

import json

def remove_dot_key(obj):
    for key in obj.keys():
        new_key = key.replace(".","")
        if new_key != key:
            obj[new_key] = obj[key]
            del obj[key]
    return obj

new_json = json.loads(data, object_hook=remove_dot_key) 

ループ内で辞書を返していたので、変更するキーは1つだけです。また、値のコピーを作成する必要はありません。キーの名前を変更するだけです。

于 2012-06-25T12:09:41.607 に答える