2015-01-16 6 views
7

मैं डिस्क पर एक फ़ाइल में iPython नोटबुक सेल के टेक्स्ट आउटपुट को सहेजने में सक्षम होना चाहता हूं।iPython नोटबुक में किसी सेल के आउटपुट को कैसे सहेजना है?

  • सेल को फिर से चलाने के लिए सक्षम हो और मेरे उत्पादन जो कुछ के साथ नवीनतम है ऊपर लिख:

    2 अतिरिक्त आवश्यकताओं/अनुरोध नहीं हैं।

  • भी नोटबुक के भीतर आउटपुट प्रदर्शित करता है।

मैं पता लगा है कि कैसे एक फ़ाइल में एक IPython नोटबुक के सेल की कुछ बुनियादी बचत के लिए %%capture जादू का उपयोग करने के, लेकिन यह पर्याप्त लचीला नहीं लगता है: यह हर बार जब मैं जोड़कर रखता है सेल को फिर से चलाने के लिए और मैं इसे उसी सेल में प्रदर्शित करने के लिए नहीं मिल सकता है।

%%capture cap --no-stderr 
print 'stuff' 
with open('output.txt', 'w') as f: 
    f.write(cap.stdout) 

# clear the cap by deleting the variable here? 
# del cap 

जब मैं लिखने के बाद cap.show() डाल करने के लिए प्रयास करते हैं, यह प्रदर्शित करने के लिए प्रतीत नहीं होता:

यहाँ मैं अब तक है। इसके बजाए, यह आउटपुट को कैप वैरिएबल में दो बार रखता है।

+1

क्या आप * सभी * पाठ आउटपुट या केवल प्रिंट स्टेटमेंट द्वारा बनाए गए एक को चाहते हैं? आईपीथॉन डिस्प्ले मशीनरी के कारण सभी ऑब्जेक्ट्स में टेक्स्ट का प्रतिनिधित्व होता है, इसलिए पहले स्थान पर दिखाई देने से नोटबुक में और टेक्स्ट होता है। – Jakob

+1

यदि आप प्रिंट स्टेटमेंट के ठीक बाद हैं, तो [इस प्रश्न] के उत्तरों पर एक नज़र डालें (http://stackoverflow.com/q/11325019/2870069) – Jakob

उत्तर

6

आपके पास एक टाइपो है, dcap.stout में अनुपलब्ध है। यह cap.stdout होना चाहिए मैंने निम्नलिखित का परीक्षण किया और यह ठीक काम किया। cap.show() ने भी "सामान" मुद्रित किया और सेल को फिर से चलाने से फ़ाइल को ओवरराइट किया गया।

%%capture cap --no-stderr 
print 'stuff' 
with open('output.txt', 'w') as f: 
    f.write(cap.stdout) 
+0

टाइपो को ठीक किया गया है। यह केवल प्रश्न में था, मेरे स्रोत कोड में नहीं। ओवरराइटिंग ठीक है, समस्या यह है कि यदि आप "डेल कैप" नहीं करते हैं तो यह कभी-कभी आउटपुट को डुप्लिकेट करता है। या यदि आप cap.show() जोड़ते हैं, तो यह फ़ाइल को दो बार प्रिंट करता है (फ़ाइल के बजाय एक बार और स्क्रीन पर एक बार) – pocketfullofcheese

+0

यानी, समस्या फ़ाइल को ओवरराइट नहीं कर रही है ('w' के साथ खोलने से फ़ाइल साफ़ हो जाएगी)। समस्या यह है कि कैप वैरिएबल रनों के बीच साफ़ नहीं होता है। – pocketfullofcheese

+1

विभिन्न सेल में 'cap.show() 'चलाना फ़ाइल में नहीं लिखा जाएगा। – Amit

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