फ़ाइलों पर लिखते समय मैं पायथन पर नई लाइनें कैसे निर्दिष्ट करूं?


313

जावा (एक स्ट्रिंग में) की तुलना में, आप कुछ ऐसा करेंगे "First Line\r\nSecond Line"

तो आप पायथन में एक नियमित फ़ाइल के लिए कई लाइनें लिखने के प्रयोजनों के लिए कैसे करेंगे?


12
आपने क्या प्रयास किया है? काम किया? (मुझे लगता है कि नहीं, या आप पूछ नहीं होगा।) क्या हुआ?
ग्रेग हेविल

मैं सिर्फ यह जानना चाहता था कि क्या यह करने का एक सही और गलत तरीका था, मैंने इसे अभी तक कोशिश नहीं की थी।
FabianCook

5
आपको एहसास होता है कि पायथन जावा की printतरह काम करता है System.out.println, और स्वचालित रूप से पाठ के बाद एक नई पंक्ति जोड़ता है, है ना?
ग्रेग हेवगिल

मुझे यह फाइल लिखने के लिए चाहिए :)
FabianCook

2
printअजगर में बयान भी फाइलों में लिखने के लिए इस्तेमाल किया जा सकता है (विवरण अजगर 2.x और अजगर 3.x के बीच भिन्न है, तो आपके संस्करण के लिए संदर्भ डॉक्स के साथ जांच)। printपाइथन में 2.x - printपाइथन में 3.x
ग्रेग हेगिल

जवाबों:


357

यह इस बात पर निर्भर करता है कि आप कितना सही होना चाहते हैं। \nआमतौर पर काम करेंगे। यदि आप वास्तव में इसे ठीक करना चाहते हैं, तो आप osपैकेज में newline वर्ण को देखते हैं । (यह वास्तव में कहा जाता है linesep।)

नोट: पायथन एपीआई का उपयोग करते हुए फ़ाइलों को लिखते समय, का उपयोग न करें os.linesep। बस उपयोग करें \n; पायथन स्वचालित रूप से आपके प्लेटफ़ॉर्म के लिए उचित न्यूलाइन वर्ण में अनुवाद करता है।


14
आपके द्वारा दिए गए लिंक से "पाठ मोड (डिफ़ॉल्ट) में खोली गई फाइलों को लिखते समय एक लाइन टर्मिनेटर के रूप में os.linesep का उपयोग न करें, इसके बजाय सभी प्लेटफार्मों पर एक एकल '\ n' का उपयोग करें।" तो आपको "सही" से क्या मतलब है और उनकी और आपकी टिप्पणी के कारण क्या हैं?
यासेन

21
@ यासीन: विंडोज पर, नयालाइन अनुक्रम है "\r\n"। इसका मतलब है कि os.linesepहोगा "\r\n"। जब आप टेक्स्ट मोड में किसी फाइल को लिख रहे होते हैं, तो वह न्यूलाइन ट्रांसलेशन करता है जैसा कि वह लिखता है; "\n"अर्थात्, आउटपुट में प्रत्येक "\r\n"का परिणामी फ़ाइल में अनुवाद किया जाएगा । आप देख सकते हैं कि यह समस्या कैसे है यदि आप जिस पाठ को पहले से लिख रहे हैं उसमें "\r\n"अनुक्रम हैं: परिणाम "\r\r\n"हर पंक्ति के अंत में होगा । मुझे लगता है, कम से कम: मैं वास्तव में यह कोशिश नहीं की है।
नैट CK

हो सकता है कि यह पहले से ही उत्तर को ठीक करने और गलत os.linesepप्रस्ताव को हटाने का समय हो , नहीं? यह एक बड़ा नाटक नहीं होगा और लेखक का गौरव मुझे बहुत तकलीफ नहीं देगा
ZAB

8
तुम मेरा गौरव नहीं जानते। लेकिन अधिक गंभीरता से, मुझे लगता है कि यह नोट करना उपयोगी है कि linesepवहां मौजूद है और इसलिए आप यह पता लगा सकते हैं कि सिस्टम लाइन विभाजक क्या है।
चार्ली मार्टिन

2
@ZAB सभी स्ट्रिंग्स को टेक्स्ट मोड में फाइलों पर नहीं लिखा जाता है। linesepअभी भी उपयोगी हो सकता है।
काइल स्ट्रैंड

61

नई लाइन चरित्र है \n। इसका उपयोग एक स्ट्रिंग के अंदर किया जाता है।

उदाहरण:

    print('First line \n Second line') 

\nन्यूलाइन कैरेक्टर कहां है।

यह परिणाम देगा:

First line
 Second line

यदि आप पायथन 2 का उपयोग करते हैं, तो आप प्रिंट फ़ंक्शन पर कोष्ठक का उपयोग नहीं करते हैं।


7
बस एक सुझाव के रूप में, अगर हम 'n' के बाद एक सफेद स्थान नहीं देते हैं, तो हमें दूसरी पंक्ति में एक जगह इंडेंट नहीं मिलता है। मेरा क्या मतलब है:
मनोज कुमार

एक तार के अंदर बच "\ n" चार का उपयोग करने के लिए इशारा करने के लिए धन्यवाद! शायद अपने जैसे नए पायथन बच्चों के लिए स्पष्ट नहीं है
ग्रेडफ़ॉक्स

3
@ सभी / किसी / मनोजकुमार a = 1; ख = 2; प्रिंट (एक, "\ n", ख); o / p: 1 2 (2 एक सफेद स्थान इंडेंट के साथ नई लाइन पर है, यह ठीक से नहीं दिख रहा है, लेकिन मान लें कि 2 पर एक सफेद स्थान इंडेंट के साथ अलग-अलग लाइनों पर 1 और 2) इस मामले में मैं व्हिल्ट स्पेस (एक को कैसे हटाऊंगा) 2 से पहले अंतरिक्ष इंडेंट) और 1. नोट के साथ इंडेंट करेगा। हम 2 प्रिंट स्टेटमेंट का उपयोग नहीं करेंगे और 1 और 2 अलग (नई) लाइनों पर होंगे।
प्रशाल ANAND

24

आप या तो अलग से या एक ही स्ट्रिंग के भीतर नई लाइनों में लिख सकते हैं, जो आसान है।

उदाहरण 1

इनपुट

line1 = "hello how are you"
line2 = "I am testing the new line escape sequence"
line3 = "this seems to work"

आप अलग से '\ n' लिख सकते हैं:

file.write(line1)
file.write("\n")
file.write(line2)
file.write("\n")
file.write(line3)
file.write("\n")

उत्पादन

hello how are you
I am testing the new line escape sequence
this seems to work

उदाहरण 2

इनपुट

जैसा कि अन्य लोगों ने पिछले उत्तर में बताया है, \ n को अपने स्ट्रिंग में प्रासंगिक बिंदुओं पर रखें:

line = "hello how are you\nI am testing the new line escape sequence\nthis seems to work"

file.write(line)

उत्पादन

hello how are you
I am testing the new line escape sequence
this seems to work

मुझे लगता है कि आपका आउटपुट तकनीकी रूप से गलत है। दूसरी और तीसरी पंक्ति को अपने पहले पात्रों के बाईं ओर एक सफेद स्थान के साथ प्रिंट करना चाहिए। एक अन्य उपाय यह होगा कि इन दोनों स्थानों को लाइन चर से हटा दिया जाए।
ईसाई वेस्टब्रुक

किसी भी दर पर, उदाहरण दो में कोड आपके द्वारा प्रदर्शित सटीक आउटपुट का उत्पादन नहीं करेगा।
ईसाई वेस्टब्रुक

10

यदि आप एक ही बार में पाठ की कई पंक्तियों में प्रवेश कर रहे हैं, तो मुझे यह सबसे पठनीय प्रारूप लगता है।

file.write("\
Life's but a walking shadow, a poor player\n\
That struts and frets his hour upon the stage\n\
And then is heard no more: it is a tale\n\
Told by an idiot, full of sound and fury,\n\
Signifying nothing.\n\
")

प्रत्येक पंक्ति के अंत में नई लाइन (जो एक त्रुटि का कारण होगी) से बच जाती है।


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

9

पायथन में आप बस नई-लाइन के चरित्र का उपयोग कर सकते हैं, अर्थात \n


3
@maazza: लेखन के बारे में सवाल नहीं है ?
सुबह 9:07

9

सबसे सरल उपाय

यदि आप केवल printबिना किसी तर्क के कॉल करते हैं, तो यह एक रिक्त रेखा को आउटपुट करेगा।

print

आप आउटपुट को इस तरह से फ़ाइल में डाल सकते हैं (अपने उदाहरण पर विचार करते हुए):

f = open('out.txt', 'w')
print 'First line' >> f
print >> f
print 'Second line' >> f
f.close()

न केवल यह ओएस-अज्ञेयवादी ( osपैकेज का उपयोग किए बिना भी ) है, यह \nतार के भीतर डालने से भी अधिक पठनीय है ।

व्याख्या

print()समारोह स्ट्रिंग के अंत कहा जाता है, के लिए एक वैकल्पिक कीवर्ड तर्क है end, ओएस न्यू लाइन चरित्र, उदाहरण के लिए करने के लिए जो चूक। \n। इसलिए, जब आप कॉल कर रहे हैं print('hello'), तो पायथन वास्तव में प्रिंट कर रहा है 'hello' + '\n'। जिसका अर्थ है कि जब आप printबिना किसी तर्क के सिर्फ कॉल कर रहे हैं , तो यह वास्तव में छपाई कर रहा है '' + '\n', जिसके परिणामस्वरूप एक नई रूपरेखा है।

विकल्प

मल्टी-लाइन स्ट्रिंग्स का उपयोग करें।

s = """First line
    Second line
    Third line"""
f = open('out.txt', 'w')
print s >> f
f.close()

6

प्लेटफ़ॉर्म स्वतंत्र लाइन ब्रेकर: लिनक्स, विंडोज़ और आईओएस

import os
keyword = 'physical'+ os.linesep + 'distancing'
print(keyword)

आउटपुट:

physical
distancing

4

उसी तरह से '\n', हालांकि आपको शायद इसकी आवश्यकता नहीं होगी '\r'। क्या आपके जावा संस्करण में इसका कोई कारण है? यदि आपको इसकी आवश्यकता है / आप चाहते हैं, तो आप इसे पाइथन में भी उपयोग कर सकते हैं।


1
\rगाड़ी वापसी ऐसा लगता है कि जब आप नई लाइन के लिए प्रणाली संपत्ति प्राप्त है, के रूप में\r\n
FabianCook

4
@SmartLemon: यह शायद विंडोज पर सच है, लेकिन अधिकांश अन्य प्रणालियों \nपर केवल एक नया चरित्र है।
ग्रेग हेविगेल

@ जीन-माइकेलसेलियर: मैक ओएस एक्स से पहले सच था \n। मैक ओएस एक्स का उपयोग करता है ।
ग्रेग हेवगिल

ठीक है, मैं अपनी टिप्पणी हटा दूंगा, यह वास्तव में बेकार है। माफ़ करना!
जीन-माइकेल सेलेरियर

4

\ n - सरल न्यूलाइन वर्ण प्रविष्टि कार्य:

# Here's the test example - string with newline char:
In [36]: test_line = "Hi!!!\n testing first line.. \n testing second line.. \n and third line....."

# Output:
In [37]: print(test_line)

Hi!!!
 testing first line..
 testing second line..
 and third line.....

2

जावा से स्ट्रिंग शाब्दिकों में अधिकांश एस्केप वर्ण पायथन में भी मान्य हैं, जैसे "\ r" और "\ n"।


क्योंकि पायथन और जावा सी से प्रभावित थे और यह इस भाषा से आया था। अधिक जानकारी के लिए
एलेक्स।

1

जैसा कि अन्य उत्तरों में उल्लेख किया गया है: "नई पंक्ति वर्ण \ n है। इसका उपयोग स्ट्रिंग के अंदर किया जाता है"।

मुझे सबसे सरल और पठनीय तरीका मिला "प्रारूप" फ़ंक्शन का उपयोग करना, नई लाइन के लिए नाम के रूप में nl का उपयोग करना, और उस स्ट्रिंग को तोड़ना जिसे आप प्रिंट करने जा रहे सटीक प्रारूप में प्रिंट करना चाहते हैं:

print("line1{nl}"
      "line2{nl}"
      "line3".format(nl="\n"))

कि उत्पादन होगा:

line1
line2
line3

इस तरह यह कार्य करता है, और कोड की उच्च पठनीयता भी देता है :)


0

\ n स्ट्रिंग की रेखाओं को अलग करता है। निम्नलिखित उदाहरण में, मैं एक लूप में रिकॉर्ड लिखता रहता हूं। प्रत्येक रिकॉर्ड द्वारा अलग किया जाता है \n

f = open("jsonFile.txt", "w")

for row_index in range(2, sheet.nrows):

  mydict1 = {
    "PowerMeterId" : row_index + 1,
    "Service": "Electricity",
    "Building": "JTC FoodHub",
    "Floor": str(Floor),
    "Location": Location,
    "ReportType": "Electricity",
    "System": System,
    "SubSystem": "",
    "Incomer": "",
    "Category": "",
    "DisplayName": DisplayName,
    "Description": Description,
    "Tag": tag,
    "IsActive": 1,
    "DataProviderType": int(0),
    "DataTable": ""
  }
  mydict1.pop("_id", None)
  f.write(str(mydict1) + '\n')

f.close()

0

ध्यान देने योग्य बात यह है कि जब आप इंटरेक्टिव पाइथन शेल या जुपिटर नोटबुक का उपयोग करके एक स्ट्रिंग का निरीक्षण करते हैं, \nऔर अन्य बैकस्लेस्ड स्ट्रिंग्स जैसे \tकि शाब्दिक रूप से प्रस्तुत किए जाते हैं :

>>> gotcha = 'Here is some random message...'
>>> gotcha += '\nAdditional content:\n\t{}'.format('Yet even more great stuff!')
>>> gotcha
'Here is some random message...\nAdditional content:\n\tYet even more great stuff!'

नए अंक, टैब और अन्य विशेष गैर-मुद्रित वर्ण केवल व्हाट्सएप के रूप में प्रस्तुत किए जाते हैं , जब मुद्रित होते हैं , या फ़ाइल में लिखे जाते हैं:

>>> print('{}'.format(gotcha))
Here is some random message...
Additional content:
    Yet even more great stuff!
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.