0

関数 VisitAllObjects が異なるファイルを受け入れて辞書を返すようにしようとしています。しかし、私が現在持っているものは同じ名前を指していますか? したがって、gdata が実行されると、fdata は gdata に変更されます。fdata と gdata が gh5 ファイルからの尊敬されるデータと等しくなるようにするにはどうすればよいですか?

f = h5py.File('testfile.gh5', 'r')
g = h5py.File('testfile2.gh5', 'r')

def VisitAllObjects(Group,Path, FileInfo=None):
    if FileInfo is None:
        FileInfo = {}
    for i in Group.items():
        if isinstance(i[1], h5py.Group):
            VisitAllObjects(i[1], Path + '/' + i[0])
        else:
            DatasetName = Path + '/' + i[0]
            FileInfo[DatasetName] = (Group[DatasetName].shape, Group[DatasetName].dtype)
    return FileInfo

fdata = VisitAllObjects(f,'')
gdata = VisitAllObjects(g,'')

あなたの助けと、内部で visit_all_objects を呼び出すときに file_info を追加することで、これを機能させることができました。これに問題がある場合はお知らせください。さらに確認する必要がありますが、fdata と gdata を使用すると異なるデータが返され、fdata is gdataFalse になります。ありがとう。

私はそれを次のように動作させました:

def visit_all_objects(Group,Path, file_info=None):
    if file_info is None:
        file_info = {}
    for i in Group.items():
        if isinstance(i[1], h5py.Group):
            visit_all_objects(i[1], Path + '/' + i[0], file_info)
        else:
            DatasetName = Path + '/' + i[0]
            file_info[DatasetName] = (Group[DatasetName].shape, Group[DatasetName].dtype)
    return file_info
4

1 に答える 1

0

辞書を変更する代わりに、新しい辞書を作成して変更してみてください。FileInfo = FileInfo.copy()の場合を処理した直後に、関数の上部近くに置くことでそれを行うことができますFileInfo is None

于 2012-12-31T16:26:51.840 に答える