ফাইলগুলিতে লেখার সময় আমি পাইথনে নতুন লাইনগুলি কীভাবে নির্দিষ্ট করব?


313

জাভা তুলনায় (একটি স্ট্রিং), আপনি যেমন কিছু করতে হবে "First Line\r\nSecond Line"

তাহলে আপনি নিয়মিত ফাইলটিতে একাধিক লাইন লেখার উদ্দেশ্যে পাইথনে কীভাবে তা করবেন?


12
আপনি কি চেষ্টা করেছেন? এটা কি কাজ করেছিল? (আমি অনুমান করি না, বা আপনি জিজ্ঞাসা করবেন না)) কি হয়েছে?
গ্রেগ হিউগিল

আমি এটি জানতে চাই যে এটি করার কোনও সঠিক এবং কোনও ভুল উপায় ছিল কিনা, যদিও আমি এখনও এটি চেষ্টা করে দেখিনি।
ফ্যাবিয়ানকুক

5
আপনি কি বুঝতে পেরেছেন যে পাইথনের printকাজ System.out.printlnজাভা এর মতো , এবং স্বয়ংক্রিয়ভাবে পাঠ্যের পরে একটি নতুন লাইন যুক্ত করে, তাই না?
গ্রেগ হিউগিল

আমি এটি ফাইল লেখার জন্য চাই :)
ফ্যাবিয়ানকুক

2
printপাইথন মধ্যে বিবৃতি এছাড়াও ফাইলগুলি লিখবে ব্যবহার করা যেতে পারে (বিস্তারিত পাইথন 2.x এবং পাইথন 3.x মধ্যে পার্থক্য, তাই আপনার সংস্করণের জন্য রেফারেন্স ডক্স সঙ্গে চেক)। printপাইথন 2.x - printপাইথন 3.x এ
গ্রেগ হিউগিল

উত্তর:


357

এটি নির্ভর করে আপনি কতটা সঠিক হতে চান। \nসাধারণত কাজ করবে। আপনি যদি সত্যিই এটি সঠিকভাবে পেতে চান তবে আপনি osপ্যাকেজে নতুন লাইন অক্ষরটি সন্ধান করবেন । (এটি আসলে বলা হয় linesep।)

দ্রষ্টব্য: পাইথন এপিআই ব্যবহার করে ফাইলগুলিতে লেখার সময় এটি ব্যবহার করবেন না os.linesep। শুধু ব্যবহার \n; পাইথন স্বয়ংক্রিয়ভাবে এটি আপনার প্ল্যাটফর্মের জন্য সঠিক নিউলাইন চরিত্রটিতে অনুবাদ করে।


14
আপনি প্রদত্ত লিঙ্কটি থেকে "টেক্সট মোডে খুললে ফাইলগুলি লেখার সময় os.linesep লাইন টার্মিনেটর হিসাবে ব্যবহার করবেন না (ডিফল্ট); সমস্ত প্ল্যাটফর্মে পরিবর্তে একটি '\ n' ব্যবহার করুন।" সুতরাং আপনি "ডান" বলতে কী বোঝায় এবং তাদের এবং আপনার মন্তব্যের কারণগুলি কী?
ইয়াসেন

21
@ ইয়াসেন: উইন্ডোজে, নতুন লাইনের ক্রমটি "\r\n"। এর অর্থ এই যে os.linesepহতে হবে "\r\n"। আপনি যখন পাঠ্য মোডে কোনও ফাইলে লিখছেন, এটি লেখার সাথে সাথে নিউলাইন অনুবাদ করে; অর্থাৎ "\n"আউটপুটে প্রতিটি "\r\n"ফলাফল ফাইলে অনুবাদ করা হবে। আপনি দেখতে পাচ্ছেন যে সমস্যাটি কীভাবে হয় যদি আপনি ইতিমধ্যে লিখছেন যে পাঠ্যটিতে "\r\n"সিক্যুয়েন্স রয়েছে : ফলাফলটি "\r\r\n"প্রতিটি লাইনের শেষে থাকবে। আমি ধরে নিই, কমপক্ষে: আমি আসলে এটি চেষ্টা করে দেখিনি।
নাট সি কে

ইতিমধ্যে উত্তরটি ঠিক করার এবং ভুল os.linesepপ্রস্তাবটি সরিয়ে নেওয়ার সময় এসেছে , না? এটি কোনও বড় নাটক হবে না এবং লেখকের অভিমান আমার খুব বেশি ক্ষতি হবে না বলে বিশ্বাস করি
জ্যাব

8
আপনি আমার অহংকার জানেন না। তবে আরও গুরুত্ব সহকারে, আমি মনে করি যে linesepএটি সেখানে রয়েছে এবং এটি বিদ্যমান রয়েছে তা নোট করা কার্যকর হবে যাতে আপনি সিস্টেম লাইন বিভাজক কী তা জানতে পারেন।
চার্লি মার্টিন

2
@ জ্যাব সমস্ত পাঠ্য পাঠ্য মোডে ফাইলগুলিতে লেখা হয় না। linesepএখনও দরকারী হতে পারে।
কাইল স্ট্র্যান্ড

61

নতুন লাইনের চরিত্রটি হ'ল \n। এটি একটি স্ট্রিংয়ের অভ্যন্তরে ব্যবহৃত হয়।

উদাহরণ:

    print('First line \n Second line') 

\nনতুন লাইনের চরিত্রটি কোথায়

এটির ফলস্বরূপ:

First line
 Second line

আপনি যদি পাইথন 2 ব্যবহার করেন, আপনি মুদ্রণ ফাংশনে বন্ধনী ব্যবহার করবেন না।


7
কেবলমাত্র একটি পরামর্শ হিসাবে, যদি আমরা 'সাদা স্থান' না দিয়ে \ n পরে আমরা দ্বিতীয় লাইনে একটি স্পেস ইন্ডেন্ট পাই না। আমি যা বোঝাতে চাইছি তা হল: 'প্রথম লাইনটি প্রিন্ট করুন ec n সেকেন্ড লাইন'
মনোজ কুমার

একটি স্ট্রিংয়ের ভিতরে পালানো "\ n" চরটি ব্যবহার করার জন্য নির্দেশ করার জন্য ধন্যবাদ! আমার মতো নতুন পাইথন বাচ্চাদের কাছে সম্ভবত এটি সুস্পষ্ট নয়
গ্রেডফক্স

3
@ সমস্ত / যে কেউ / মনোজকুমার এ = 1; খ = 2; প্রিন্ট (ক, "\ N", খ); o / p: 1 2 (2 একটি সাদা স্পেস ইনডেন্টের সাথে নতুন লাইনে রয়েছে এটি সঠিকভাবে দেখছে না তবে ধরে নিন যে 1 এবং 2 পৃথক লাইনে একটি সাদা স্পেস ইনডেন্টের সাথে 2 তে রয়েছে) এই ক্ষেত্রে আমি কীভাবে শূন্যস্থান সরিয়ে ফেলব (একটি স্পেস ইন্ডেন্ট) 2 এর আগে এবং 1 দিয়ে ইনডেন্ট তৈরি করবে 1. দ্রষ্টব্য: আমরা 2 টি মুদ্রণ বিবৃতি ব্যবহার করব না এবং 1 এবং 2 পৃথক (নতুন) লাইনে থাকবে।
প্রফুল আওয়ান্দ

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

ইনপুট

অন্যরা পূর্বের উত্তরে যেমন নির্দেশ করেছে, আপনার স্ট্রিংয়ে points 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\
")

Line প্রতিটি লাইনের শেষে নতুন লাইনটি পালিয়ে যায় (যা ত্রুটির কারণ হতে পারে)।


আপনার অভ্যন্তরীণ প্রথম বন্ধনী, সুতরাং লাইনগুলি পালানোর প্রয়োজন নেই। কেবল স্ট্রিংটি শেষ করুন, একটি নতুন লাইনে যান এবং একটি নতুন শুরু করুন। কোনও অতিরিক্ত নতুন লাইন থাকবে না এবং আপনাকে পালাতে হবে না। এছাড়াও, আপনি উপরোক্তটি করে নিলেও, নতুন রেখার চরিত্র এবং পালানো কেবল একে অপরকে বাতিল করে দেয়।
ব্যবহারকারী 144153

9

পাইথনে আপনি কেবলমাত্র নতুন লাইন চরিত্রটি ব্যবহার করতে পারেন, যেমন \n


3
@ মায়জা: লেখার প্রশ্ন নেই ?
mhakke

9

সহজ সমাধান

যদি আপনি কেবল printকোনও যুক্তি ছাড়াই কল করেন তবে এটি একটি ফাঁকা লাইন আউটপুট দেবে।

print

আপনি এই জাতীয় কোনও ফাইলের আউটপুটটি পাইপ করতে পারেন (আপনার উদাহরণ বিবেচনা করে):

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

এটি কেবল ওএস-অজোনস্টিকই নয় (এমনকি osপ্যাকেজটি ব্যবহার না করে ) এটি \nস্ট্রিংয়ের মধ্যে রাখার চেয়েও বেশি পঠনযোগ্য ।

ব্যাখ্যা

print()ফাংশন স্ট্রিংয়ের শেষ প্রান্ত বলা জন্য একটি ঐচ্ছিক শব্দ যুক্তি আছে end, অপারেটিং সিস্টেম এর newline অক্ষর, যেমন জন্য যা অক্ষমতা। \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
ফ্যাবিয়ানকুক

4
@ স্মার্টলমন: উইন্ডোজে এটি সম্ভবত সত্য, তবে বেশিরভাগ সিস্টেমে \nএকমাত্র নতুন লাইনের চরিত্র।
গ্রেগ হিউগিল

@ জিন-মাইচেলসিলিয়ার: ম্যাক ওএস এক্সের আগে ম্যাক ওএস এক্স ব্যবহারের আগে এটি সত্য ছিল \n
গ্রেগ হিউগিল

ঠিক আছে, আমি আমার মন্তব্যটি সরিয়ে দেব, এটি আসলেই অকেজো। দুঃখিত!
জিন-মিশেল সেলারিয়ার

4

new 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। N এটি একটি স্ট্রিংয়ের অভ্যন্তরে ব্যবহৃত হয়"।

আমি সর্বাধিক সহজ এবং পঠনযোগ্য উপায়টি হ'ল "ফর্ম্যাট" ফাংশনটি ব্যবহার করে, নতুন লাইনের নাম হিসাবে এনএল ব্যবহার করা এবং আপনি যে স্ট্রিংটি মুদ্রণ করতে চান সেই নীতিটি ভাঙ্গতে চান:

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!
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.