लिख रहाIOError: [errno 22] अमान्य तर्क जब पढ़ने/बड़े bytestring
IOError: [Errno 22] Invalid argument
हो रही है जब मैं f.write()
, जहां f
मोड wb
साथ खोला गया था के साथ डिस्क के लिए एक बड़ी bytestring लिखने की कोशिश।
मैंने विंडोज नेटवर्क ड्राइव का उपयोग करते समय बहुत से लोगों को यह त्रुटि प्राप्त कर देखा है, लेकिन मैं ओएसएक्स पर हूं (10.7 जब मैंने मूल रूप से प्रश्न पूछा लेकिन 10.8 अब मानक एचएफएस + स्थानीय फाइल सिस्टम के साथ)। मैं पाइथन 3.2.2 का उपयोग कर रहा हूं (एक python.org बाइनरी और होमब्री इंस्टॉल दोनों पर होता है)। मुझे सिस्टम पायथन 2.7.2 के साथ यह समस्या नहीं दिखाई दे रही है।
मैंने w+b
पर this Windows bug workaround पर आधारित मोड भी कोशिश की, लेकिन निश्चित रूप से इससे मदद नहीं मिली।
डेटा एक बड़ी संख्यात्मक सरणी (लगभग 4 जीबी फ्लोट) से आ रहा है। यह ठीक काम करता है अगर मैं मैन्युअल रूप से स्ट्रिंग पर लूप करता हूं और इसे टुकड़ों में लिखता हूं। लेकिन क्योंकि मैं इसे एक पास में लिख नहीं सकता, np.save
और np.savez
असफल - क्योंकि वे केवल f.write(ary.tostring())
का उपयोग करते हैं। मुझे एक समान त्रुटि मिलती है जब मैं इसे मौजूदा HDF5 फ़ाइल में h5py
के साथ सहेजने का प्रयास करता हूं।
ध्यान दें कि मैं एक ही समस्या है जब एक फ़ाइल file(filename, 'rb')
के साथ खुला पढ़ने मिलती है: f.read()
इस IOError
देता है, जबकि f.read(chunk_size)
उचित chunk_size
कार्यों के लिए।
कोई विचार?
अजीब। 'EINVAL' = 22, लेकिन ['मैन 2 लिखें'] में कुछ भी नहीं (https://developer.apple.com/library/mac/documentation/darwin/reference/manpages/man2/write.2.html) लागू दिखता है। क्या आप वास्तव में 'लिखने' syscall विफल होने की जांच के लिए ['dtruss'] (http://developer.apple.com/documentation/Darwin/Reference/Manpages/man1/dtruss.1m.html) के अंतर्गत चला सकते हैं? – ephemient
"यह ठीक काम करता है अगर मैं मैन्युअल रूप से स्ट्रिंग पर लूप करता हूं और इसे टुकड़ों में लिखता हूं।" तो तुम क्यों नहीं? डेटा का एक हिस्सा कितना बड़ा लगता है कि आपको एक समय में लिखने में सक्षम होना चाहिए? आप 'size_t' के साथ गिन सकते हैं? – msw
@msw जैसा मैंने कहा, यह 'np.save' तोड़ता है और मेरे लिए अधिक महत्वपूर्ण रूप से' h5py'। जाहिर है अगर मैं इसे मैन्युअल रूप से कर रहा हूं, तो मैं इसे टुकड़ों में लिख सकता हूं और लिख सकता हूं, और यह 'h5py' में काम करता है अगर मैं पहले डेटासेट बना देता हूं और कहता हूं, एक समय में 50 पंक्तियां। लेकिन यह आवश्यक नहीं होना चाहिए, क्योंकि इस तथ्य से प्रमाणित है कि उन दोनों पुस्तकालयों को ऐसा करने की आवश्यकता नहीं दिखती है। और मेरे सरणी "केवल" 500 मिलियन प्रविष्टियां हैं (लॉग_2 <2 9), जो 32-बिट 'int' द्वारा संबोधित करने योग्य है, अकेले' size_t' दें। सुझाव के लिए – Dougal