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我能得到這個工作時添加文檔信息。如果你看到這個請讓我知道什麼問題,我仍然需要檢查它更多,但使用FDATA和GDATA回來與不同的數據和fdata is gdata
是假。謝謝。
我得到了它與以下工作:
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
我們強烈建議您遵循[PEP-8](http://www.python.org/dev/peps/pep-0008/#prescriptive-naming-conventions),其中建議保留'CapWords'上課,並使用'lowercase_with_underscores'作爲函數和局部變量 - 它使您的代碼更容易一目瞭然。 (你可以看到它也會影響這裏的語法高亮)。 –
(a)PEP8。找到它並閱讀它(b)「但是我現在指的是同一個名字?」意思。請提供示例輸入和輸出,並解釋它爲什麼是錯誤的。 – Marcin
你正在做遞歸調用是無用的,因爲你不保存結果,只有最上面的值保存。 'fdata'不應該「變成」在你的例子'gdata'(雖然我不知道如何'h5py'的作品,但無論如何...)。您可能會看到相同的結果,因爲只考慮最頂層的元素。你有沒有看到它們是否是使用'is'運算符的同一個對象? – Bakuriu