पायथन फाइल करने के लिए बाइट्स लिखें


143

मेरे पास एक फ़ंक्शन है जो एक स्ट्रिंग लौटाता है। स्ट्रिंग में कैरिज रिटर्न और नई लाइन फीड (0x0D, 0x0A) शामिल हैं। हालाँकि जब मैं किसी फाइल को लिखता हूं तो उसमें केवल नई लाइन फीड होती है। क्या गाड़ी वापसी और नई लाइन फीड को शामिल करने के लिए आउटपुट प्राप्त करने का एक तरीका है।

msg = function(arg1, arg2, arg3)
f = open('/tmp/output', 'w')
f.write(msg)
f.close()

की एक पढ़ा हैfile.__doc__
विम

जवाबों:


257

यदि आप बाइट्स लिखना चाहते हैं तो आपको फाइल को बाइनरी मोड में खोलना चाहिए।

f = open('/tmp/output', 'wb')

8
चूंकि ओपी एक गैर-विंडोज प्लेटफॉर्म का उपयोग कर रहा है, यह केवल Py3 में काम करता है। Py2 में, आपको उपयोग करने की आवश्यकता होगी io.open
lvc

2
मुझे लगता है कि यह अजगर में ही एक बग है, जिसे देखते हुए अजगर रनटाइम पर डेटा प्रकारों का पता लगा सकता है, और बाइनरी और टेक्स्ट इनपुट के बीच पता लगा सकता है, मुझे लगता है कि इसे अजगर में ही तय किया जाना चाहिए, क्यों इस पृष्ठ पर सैकड़ों लोग समाप्त हो रहे हैं, यदि यह अजगर stdlib में एक अगर बयान से बचा जा सकता है, अगर आप सहमत हैं, तो मुझे नीचा दिखाओ अगर तुम चाहिए।
फेलिप वैलेड्स

2
@FelipeValdes दुर्भाग्य से, अगर यह कभी गलत तरीके से पता लगाया गया था तो लेखन सामग्री को आश्चर्यचकित कर सकता है। इससे भी अधिक गुस्सा, यह कि गलत पहचान केवल कुछ अजीब बढ़त के मामलों में हो सकती है जो आश्चर्यजनक और मुश्किल हो जाती है। इसके बजाय स्पष्ट व्यवहार पर भरोसा करना, भले ही इसका मतलब है कि हमारे पास यह प्रश्न है, यह सुनिश्चित करता है कि मैं जिस तरह से विभिन्न परिदृश्यों के तहत IO व्यवहार करता है, उसमें निश्चितता हो सकती है।
लियाम डॉसन

1
बाइट फ़ाइलों का क्या विस्तार होगा?
चिया योंगकांग

@FelipeValdes यह कम से कम आश्चर्य / विस्मय के सिद्धांत ( en.wikipedia.org/wiki/Principle_of_least_astoniction ) से संबंधित है। आपकी विधि को अधिक उपयुक्त नाम दिया जाएगा:open_and_detect_file_type()
henrycjc
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.