विंडोज में लाइन अक्षरों के यूनिक्स अंत कैसे लिखें?


80

मैं पायथन (विंडोज पर) का उपयोग करके फ़ाइलों को कैसे लिख सकता हूं और लाइन चरित्र के यूनिक्स अंत का उपयोग कर सकता हूं?

जैसे कब कर:

f = खुला ('file.txt', 'w')
एफ। राइट ('हैलो \ n')
f.close ()

अजगर अपने आप बदल \nजाता है \r\n

जवाबों:


65

पायथन 2 और 3 के लिए

देखें: आधुनिक तरीका: इस पृष्ठ पर newline = '' उत्तर का उपयोग करें

केवल पायथन 2 के लिए (मूल उत्तर)

एंड-ऑफ-लाइन वर्णों के अनुवाद को रोकने के लिए फ़ाइल को बाइनरी के रूप में खोलें:

f = open('file.txt', 'wb')

पायथन मैनुअल का हवाला देते हुए:

विंडोज पर, मोड के लिए 'बी' संलग्न फ़ाइल को बाइनरी मोड में खोलता है, इसलिए 'आरबी', 'डब्ल्यूबी' और 'आर + बी' जैसे मोड भी हैं। विंडोज पर पायथन पाठ और बाइनरी फ़ाइलों के बीच अंतर करता है; जब डेटा पढ़ा या लिखा जाता है, तो टेक्स्ट फ़ाइलों में अंत-पंक्ति वर्ण स्वचालित रूप से थोड़े बदल जाते हैं। डेटा को फ़ाइल करने के लिए पर्दे के पीछे का यह संशोधन ASCII टेक्स्ट फ़ाइलों के लिए ठीक है, लेकिन यह JPEG या EXE फ़ाइलों की तरह ही द्विआधारी डेटा को भ्रष्ट कर देगा। ऐसी फ़ाइलों को पढ़ते और लिखते समय बाइनरी मोड का उपयोग करने के लिए बहुत सावधान रहें। यूनिक्स पर, यह मोड में एक 'बी' को जोड़ने के लिए चोट नहीं करता है, इसलिए आप इसे सभी बाइनरी फ़ाइलों के लिए प्लेटफ़ॉर्म-स्वतंत्र रूप से उपयोग कर सकते हैं।


96

आधुनिक तरीका: newline = '' का उपयोग करें

Unix- शैली LF अंत-पंक्ति के टर्मिनेटर का उपयोग करने के newline=लिए io.open () कीवर्ड पैरामीटर का उपयोग करें :

import io
f = io.open('file.txt', 'w', newline='\n')

यह पायथन 2.6+ में काम करता है। पायथन 3 में आप इसके बजाय अंतर्निहित open()फ़ंक्शन के newline=पैरामीटर का उपयोग कर सकते हैं io.open()

पुराना तरीका: बाइनरी मोड

न्यूलाइन रूपांतरण को रोकने का पुराना तरीका, जो पायथन 3 में काम नहीं करता है, एंड-ऑफ-लाइन वर्णों के अनुवाद को रोकने के लिए फ़ाइल को बाइनरी मोड में खोलना है :

f = open('file.txt', 'wb')    # note the 'b' meaning binary

लेकिन पायथन 3 में, बाइनरी मोड बाइट्स पढ़ेगा और वर्ण नहीं, इसलिए यह वह नहीं करेगा जो आप चाहते हैं। जब आप स्ट्रीम I / O करने की कोशिश करेंगे तो आपको शायद अपवाद मिलेगा। (उदाहरण के लिए "TypeError: 'str' बफर इंटरफ़ेस का समर्थन नहीं करता है")।


1
# न्यू लाइन = '' का मतलब न करने वाली \ N: यह मुझे इस का उपयोग करके सहायता plus.google.com/+PongsametreySOK/posts/2Bg8AdNJCxV
Osify

आप '\n'निर्देशित करने के लिए newline सेट कर सकते हैं , यह इससे अधिक स्पष्ट है '', और मुझे लगता है कि इसे पढ़ना आसान है।
12431234123412341234123

1
@ 12431234123412341234123 मैं सहमत हूं, का उपयोग करने '\n'की तुलना में स्पष्ट है ''। फिर मुझे यह बताने के लिए एक टिप्पणी की आवश्यकता नहीं होगी कि कोड क्या कर रहा है :) लेकिन ध्यान रखें कि यह केवल फाइलों को लिखने के लिए सही है। फ़ाइलों को पढ़ते समय, newline='\n'बिल्कुल वैसा ही नहीं है newline='', क्योंकि readlines()यह केवल \nपूर्व मामले में विभाजित होगा , लेकिन इसके साथ newline=''सार्वभौमिक न्यूलाइन हैंडलिंग भी करेगा लेकिन फिर भी डेटा में फ़ाइल से वास्तविक नईलाइन्स लौटाएगा। सलाह के लिये धन्यवाद! पायथन टेस्ट प्रोग्राम
कॉलिन डी बेनेट

पायथन 3.6+ (शायद पिछले पायथन 3 संस्करण, साथ ही)। यदि आप '\n'पहले से स्विच किए गए समान को देखने के बारे में थोड़ी चिंता करते हैं , तो आप यूनिकोड कोडपॉइंट का उपयोग कर सकते हैं (सुनिश्चित करें कि एन्कोडिंग utf-8 है या कुछ और संगत है)। with open('file.txt', 'w', encoding='utf-8', newline='\u000A'); पुनश्च परिणाम किसी भी newline='\n'संस्करण से अलग नहीं है , यह सिर्फ अगर कोई और अधिक आराम चाहता है।
बबलडलेव ०२५

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.