2012-06-25 12 views
15

मुझे एहसास है कि एक एसओ उपयोगकर्ता ने पहले इस question से पूछा है, लेकिन 200 9 में यह पूछा गया था और मैं उम्मीद कर रहा था कि एचडीएफ 5 का अधिक ज्ञान उपलब्ध था या नए संस्करणों ने इस विशेष मुद्दे को ठीक कर दिया था। यहां अपनी समस्या से संबंधित प्रश्न को पुन: स्थापित करने के लिए;एचडीएफ 5 फाइल से जानकारी हटाने

मेरे पास बड़ी ज्यामिति से नोड्स और तत्वों की एक विशाल फ़ाइल है और मुझे इससे पहले से आवश्यक सभी उपयोगी जानकारी पुनर्प्राप्त कर दी गई हैं। इसलिए, पायथन में, मैं मूल फ़ाइल को रखने की कोशिश कर रहा हूं, लेकिन जिस सूचना की मुझे आवश्यकता नहीं है उसे हटाएं और अन्य स्रोतों के लिए अधिक जानकारी भरें। उदाहरण के लिए, मेरे पास नोड्स का एक डेटासेट है जिसकी मुझे आवश्यकता नहीं है। हालांकि, मुझे पड़ोसी डेटासेट रखने और बाहरी फाइल से अपने सूचकांक के बारे में जानकारी शामिल करने की आवश्यकता है। क्या इन विशिष्ट डेटासेट को हटाने का कोई तरीका है?

या एचडीएफ 5 फ़ाइल में "प्लेसहोकर" रखने का पुराना विचार अभी भी सच है, जैसे कि कोई भी जानकारी को हटाने के साथ कैसे/परेशान करता है? मैं रिक्त स्थान के बारे में बहुत चिंतित नहीं हूं, जब तक कि यह पूरी तरह से नई फ़ाइल बनाने के लिए जानकारी को हटाने और जोड़ने के लिए तेज़ है।

नोट: मैं पढ़ने और लिखने के लिए H5py के 'r +' का उपयोग कर रहा हूं।

उत्तर

15

एक hdf5 फ़ाइल से पूरे नोड्स (समूह या डेटासेट) को हटाने में कोई समस्या नहीं होनी चाहिए।
हालांकि यदि आप स्पेस को पुनः प्राप्त करना चाहते हैं तो आपको h5repack टूल चलाने होंगे।

hdf5 docs से:

5.5.2। एक फ़ाइल और रिक्लेमिंग अंतरिक्ष से एक डेटासेट हटाया जा रहा है

HDF5 इस समय एक फ़ाइल से एक डाटासेट दूर करने के लिए या एक नष्ट कर दिया वस्तु के कब्जे में भंडारण स्थान को पुनः प्राप्त करने के लिए एक आसान तंत्र नहीं प्रदान करता है।

एक डाटासेट निकाला जा रहा है और अंतरिक्ष में इसका इस्तेमाल किया H5Ldelete समारोह और h5repack उपयोगिता कार्यक्रम के साथ किया जा सकता है पुनः दावा। H5Ldelete फ़ंक्शन के साथ, डेटासेट से लिंक संरचना से हटाया जा सकता है। सभी लिंक हटा दिए जाने के बाद, डेटासेट किसी भी एप्लिकेशन के लिए पहुंच योग्य हो जाता है और फ़ाइल से प्रभावी रूप से हटा दिया जाता है। एक अनलिंक किए गए डेटासेट द्वारा कब्जा कर लिया गया स्थान पुनर्प्राप्त करने का तरीका फ़ाइल की सभी ऑब्जेक्ट्स को एक नई फ़ाइल में लिखने के लिए है। किसी भी अनलिंक ऑब्जेक्ट एप्लिकेशन के लिए पहुंच योग्य नहीं है और नई फ़ाइल में में शामिल नहीं किया जाएगा। एक नई फ़ाइल में ऑब्जेक्ट्स लिखना कस्टम प्रोग्राम या h5repack उपयोगिता प्रोग्राम के साथ किया जा सकता है।

वैकल्पिक रूप से आप पीईटीबल्स के ptrepack टूल में भी देख सकते हैं। PyTables h5py hdf5 फ़ाइलों को पढ़ने में सक्षम होना चाहिए और ptrepack उपकरण h5repack के समान है।

यदि आप किसी डेटासेट से रिकॉर्ड्स को हटाना चाहते हैं, तो आपको शायद उन रिकॉर्ड्स को पुनर्प्राप्त करना होगा जिन्हें आप रखना चाहते हैं और एक नया डेटासेट बनाएं और पुराने को हटा दें।
पायटेबल्स removing पंक्तियों का समर्थन करता है, हालांकि इसकी अनुशंसा नहीं की जाती है।

+1

विस्तृत स्पष्टीकरण और सहायक लिंक के लिए बहुत बहुत धन्यवाद! मुझे ठीक इसी की आवश्यकता थी। – Ason

+1

धन्यवाद। यह अभी भी मामला है। प्रोग्रामेटिक रूप से एक्सप्लोर/पुष्टि की गई [यहां] (https://github.com/jackdotwa/python-concepts/blob/master/hdf5/reclaiming_space.ipynb)। –

0

यदि आप जानते हैं कि किसी विशेष डेटासेट को विश्लेषण प्रक्रिया के अंत में हटा दिया जाएगा, तो इसे मास्टर फ़ाइल में क्यों रखें? मैं एक अलग एचडीएफ 5 फाइल में अस्थायी डेटा स्टोर करता हूं जिसे विश्लेषण पूरा होने के बाद छोड़ दिया जा सकता है।यदि मास्टर फ़ाइल के अंदर अस्थायी डेटासेट को लिंक करना महत्वपूर्ण है, तो H5Lcreate_external() का उपयोग करके मास्टर और अस्थायी के बीच एक बाहरी लिंक बनाएं। बाहरी लिंक अंतरिक्ष की एक छोटी राशि का उपभोग करते हैं।

संबंधित मुद्दे