আমি করতে অভ্যস্ত print >>f, "hi there"
তবে, মনে হচ্ছে এটি print >>
হ্রাস পেয়েছে। উপরের লাইনটি করার প্রস্তাবিত উপায় কী?
আপডেট : এর সাথে সমস্ত উত্তর সম্পর্কে "\n"
... এটি কি সর্বজনীন বা ইউনিক্স-নির্দিষ্ট? IE, আমার কি "\r\n"
উইন্ডোজে করা উচিত ?
আমি করতে অভ্যস্ত print >>f, "hi there"
তবে, মনে হচ্ছে এটি print >>
হ্রাস পেয়েছে। উপরের লাইনটি করার প্রস্তাবিত উপায় কী?
আপডেট : এর সাথে সমস্ত উত্তর সম্পর্কে "\n"
... এটি কি সর্বজনীন বা ইউনিক্স-নির্দিষ্ট? IE, আমার কি "\r\n"
উইন্ডোজে করা উচিত ?
উত্তর:
এটি যেমন সহজ হতে হবে:
with open('somefile.txt', 'a') as the_file:
the_file.write('Hello\n')
ডকুমেন্টেশন থেকে:
os.linesep
পাঠ্য মোডে খোলা ফাইলগুলি লেখার সময় লাইন টার্মিনেটর হিসাবে ব্যবহার করবেন না (ডিফল্ট); পরিবর্তে সমস্ত প্ল্যাটফর্মে একক '\ n' ব্যবহার করুন।
কিছু দরকারী পঠন:
with
বিবৃতিopen()
os
(বিশেষত os.linesep
)with
ফাইল বন্ধ করার বিষয়টি মনে রাখার জন্য নিরাপদ উপায় Using
the_file.close()
?
print()
পাইথন ২.6+ এর পরে পাওয়া ফাংশনটি আপনার ব্যবহার করা উচিত
from __future__ import print_function # Only needed for Python 2
print("hi there", file=f)
পাইথন 3 এর জন্য আপনার দরকার নেই import
, কারণ print()
ফাংশনটি ডিফল্ট।
বিকল্পটি ব্যবহার করা হবে:
f = open('myfile', 'w')
f.write('hi there\n') # python will convert \n to os.linesep
f.close() # you can omit in most cases as the destructor will call it
নিউলাইনগুলি সম্পর্কিত পাইথন ডকুমেন্টেশন থেকে উদ্ধৃতি দেওয়া :
আউটপুট-এ, যদি নতুন লাইন হয় না,
'\n'
রচিত যে কোনও অক্ষর সিস্টেম ডিফল্ট লাইন বিভাজকটিতে অনুবাদ করা হয়os.linesep
। যদি নিউলাইন হয় তবে''
কোনও অনুবাদ হয় না। যদি নিউলাইনটি অন্য কোনও আইনগত মান'\n'
হয় তবে লিখিত যে কোনও অক্ষর প্রদত্ত স্ট্রিংয়ে অনুবাদ করা হয়।
\n
" newline = "" এর পরিবর্তে স্ট্রিংয়ে os.linesep যুক্ত করুন অন্যথায় আপনি \r\r\n
উইন্ডোজটিতে যাবেন । একেবারে os.linesep নিয়ে ফুট করার কোনও কারণ নেই।
\r\n
যা \n
লিস্ট যা ওস.লাইনসেপ অনুবাদ করা হয় \r\n
তাই শেষ ফলাফল \r\r\n
।
open('myfile','a')
পরিবর্তে এটি যুক্ত করার জন্য open('myfile','w')
?
পাইথন ডক্স এই ভাবে সুপারিশ:
with open('file_to_write', 'w') as f:
f.write('file contents\n')
তাই আমি সাধারণত এটিই করি :)
ডকস.প্যাথন.আর.আর্গ থেকে বিবৃতি :
ফাইল অবজেক্টগুলির সাথে ডিল করার সময় 'উইথ' কীওয়ার্ডটি ব্যবহার করা ভাল অনুশীলন । এর সুবিধা রয়েছে যে স্যুট শেষ হওয়ার পরে ফাইলটি যথাযথভাবে বন্ধ হয়ে গেছে, এমনকি পথে পথে কোনও ব্যতিক্রম উত্থাপিত হলেও। এটি সমতুল্য চেষ্টা-অবশেষে ব্লকগুলি লেখার চেয়েও ছোট।
with
লুপের অভ্যন্তরে বাসা বাঁধার দরকার হয় তখন আমি এইভাবে পছন্দ করি না । এটি আমার লুপটিতে এগিয়ে যাওয়ার সাথে সাথেই আমাকে ক্রমাগত ফাইলটি খুলতে এবং বন্ধ করতে বাধ্য করে। হয়তো আমি এখানে কিছু মিস করছি, বা এই সত্যিই দৃশ্যে এটি একটি অসুবিধা?
Os.linesep সম্পর্কিত:
এখানে উইন্ডোজে ঠিক একটি অচিহ্নিত পাইথন ২.7.১ ইন্টারপ্রেটার সেশনটি রয়েছে:
Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.linesep
'\r\n'
>>> f = open('myfile','w')
>>> f.write('hi there\n')
>>> f.write('hi there' + os.linesep) # same result as previous line ?????????
>>> f.close()
>>> open('myfile', 'rb').read()
'hi there\r\nhi there\r\r\n'
>>>
উইন্ডোজে:
যেমনটি প্রত্যাশা করা হয়েছিল, os.linesep এর মতো একই ফলাফল দেয় না'\n'
। এটি একই ফলাফলটি অর্জন করতে পারে এমন কোনও উপায় নেই। 'hi there' + os.linesep
এর সমতুল্য 'hi there\r\n'
, যা সমান নয়'hi there\n'
।
এটি এই সহজ: ব্যবহার \n
যা os.linesep এ স্বয়ংক্রিয়ভাবে অনুবাদ করা হবে। পাইথনটির প্রথম বন্দর থেকে উইন্ডোজ পর্যন্ত এটি এত সহজ।
উইন্ডোজবিহীন সিস্টেমে os.linesep ব্যবহার করার কোনও মানে নেই এবং এটি উইন্ডোজে ভুল ফলাফল দেয়।
Os.linesep ব্যবহার করবেন না!
os.linesep
উইন্ডোজ স্পষ্টভাবে টেক্সট মোডে ব্যবহার করেন তবে ফলাফলটি \r\r\n
যা ভুল তা নয়। "উইন্ডোজ ব্যবহার করে ..." অর্থহীন। সি রানটাইম লাইব্রেরি (এবং তাই পাইথন) পাঠ্য মোডে আউটপুট \n
থেকে অনুবাদ \r\n
করে। অন্যান্য সফ্টওয়্যার অন্যরকম আচরণ করতে পারে। এটি এমন নয় যে \n
পাঠ্য মোডে পড়ার সময় উইন্ডোজ চলমান সমস্ত সফ্টওয়্যার একটি লোনকে একটি লাইন বিভাজক হিসাবে স্বীকৃতি দেয় । পাইথন করে। মাইক্রোসফ্টের নোটপ্যাড পাঠ্য সম্পাদক এটি করেন না।
\r
...
os.linesep
হচ্ছে । এর মত Department of Redundancy Department
। হ্যাঁ, আপনি এটা করতে পারেন. না, আপনি চান না।
আমি "সঠিক" উপায় আছে বলে মনে করি না।
আমি ব্যবহার করব:
with open ('myfile', 'a') as f: f.write ('hi there\n')
স্মৃতি টিম পার্ষদ ।
with
সুযোগটি বাইরে গেলে ফাইলটি বন্ধ হয়ে যাবে।
open(..., 'a')
বা এমনকি হতে চাই 'at'
।
আপনি যদি প্রচুর ডেটা এবং গতি লিখছেন তবে আপনার সম্ভবত এটি করা উচিত f.write(...)
। আমি একটি দ্রুত গতির তুলনা করেছি এবং এটি print(..., file=f)
প্রচুর পরিমাণে লেখার তুলনায় যথেষ্ট দ্রুত ছিল ।
import time
start = start = time.time()
with open("test.txt", 'w') as f:
for i in range(10000000):
# print('This is a speed test', file=f)
# f.write('This is a speed test\n')
end = time.time()
print(end - start)
write
আমার মেশিনে গড়ে 2.45 সেকেন্ডে শেষ হয়েছে, যেখানে print
প্রায় 4 গুণ বেশি সময় লেগেছে (9.76s)। বলা হচ্ছে, বেশিরভাগ বাস্তব-বিশ্বের পরিস্থিতিতে এটি কোনও সমস্যা হবে না।
আপনি যদি আপনার সাথে যেতে print(..., file=f)
চান তবে সম্ভবত আপনি খুঁজে পাবেন যে আপনি সময়-সময়ে নতুন লাইনটি দমন করতে চান, বা অন্য কোনও কিছু দিয়ে এটি প্রতিস্থাপন করতে চাইবেন। এটি alচ্ছিক end
প্যারামিটার স্থাপন করে করা যেতে পারে , যেমন;
with open("test", 'w') as f:
print('Foo1,', file=f, end='')
print('Foo2,', file=f, end='')
print('Foo3', file=f)
আপনি যে কোনও উপায়েই বেছে নিন আমি with
এটি ব্যবহার করার পরামর্শ দিচ্ছি কারণ এটি কোডটি পড়া আরও সহজ করে তোলে।
আপডেট : পারফরম্যান্সের এই পার্থক্যটি সত্য দ্বারা ব্যাখ্যা করা হয়েছেwrite
সত্যভাবে অত্যন্ত বাফার হয়েছে এবং ডিস্কে কোনও লেখার আগে ফিরে আসার আগে ফিরে আসে ( এই উত্তরটি দেখুন ), যেখানে print
(সম্ভবত) লাইন বাফারিং ব্যবহার করা হয়। এটির জন্য একটি সহজ পরীক্ষা হ'ল দীর্ঘ লেখার জন্য পারফরম্যান্স পরীক্ষা করাও যেখানে লাইন বাফারিংয়ের অসুবিধাগুলি (গতির দিক দিয়ে) কম উচ্চারণ করা হবে।
start = start = time.time()
long_line = 'This is a speed test' * 100
with open("test.txt", 'w') as f:
for i in range(1000000):
# print(long_line, file=f)
# f.write(long_line + '\n')
end = time.time()
print(end - start, "s")
পারফরম্যান্স পার্থক্যটি এখন খুব কম স্পষ্ট হয়ে ওঠে, গড় 2.20 এর জন্য write
সময়কাল এবং 3.10 এর জন্য print
। এই দীর্ঘ লাইনের পারফরম্যান্সটি পেতে যদি আপনার বেশ কয়েকটি স্ট্রিং যুক্ত করতে হয় তবে ব্যবহারের ক্ষেত্রে যেখানে print
আরও দক্ষ হবে তা কিছুটা বিরল।
আপনি যখন লাইন বলেছেন তখন এর অর্থ কিছু ক্রমিক অক্ষর যা '\ n' অক্ষরগুলিতে শেষ হয়। লাইনটি এক পর্যায়ে শেষ হওয়া উচিত তাই আমাদের প্রতিটি লাইনের শেষে '\ n' বিবেচনা করা উচিত। সমাধান এখানে:
with open('YOURFILE.txt', 'a') as the_file:
the_file.write("Hello")
প্রতিটি লিখার পরে সংযোজন মোডে কার্সারটি নতুন লাইনে চলে আসে, আপনি w
মোডটি ব্যবহার করতে চাইলে \n
আপনার write()
ফাংশন শেষে অক্ষর যুক্ত করা উচিত :
the_file.write("Hello\n")
ফ্লাস্কে কোনও ফাইলে লেখার জন্য ব্যবহার করা যেতে পারে:
filehandle = open("text.txt", "w")
filebuffer = ["hi","welcome","yes yes welcome"]
filehandle.writelines(filebuffer)
filehandle.close()
আপনি চেষ্টা করতে পারেন filewriter
pip install filewriter
from filewriter import Writer
Writer(filename='my_file', ext='txt') << ["row 1 hi there", "row 2"]
লিখেছেন my_file.txt
একটি পুনরাবৃত্তযোগ্য বা __str__
সমর্থন সহ একটি অবজেক্ট নেয় ।
যখন আমাকে নতুন লাইনগুলি বেশি লিখতে হবে, আমি একটি লাম্বদা সংজ্ঞায়িত করি যা একটি print
ফাংশন ব্যবহার করে:
out = open(file_name, 'w')
fwl = lambda *x, **y: print(*x, **y, file=out) # FileWriteLine
fwl('Hi')
এই পদ্ধতির সুবিধা রয়েছে যা এটি print
ফাংশনের সাথে উপলব্ধ সমস্ত বৈশিষ্ট্য ব্যবহার করতে পারে।
আপডেট: মন্তব্য বিভাগে জর্জি যেমন উল্লেখ করেছেন , partial
ফাংশনটির মাধ্যমে এই ধারণাটি আরও উন্নত করা সম্ভব :
from functools import partial
fwl = partial(print, file=out)
আইএমএইচও, এটি একটি আরও কার্যকরী এবং কম ক্রিপ্টিক পদ্ধতির।
from functools import partial; fwl = partial(print, file=out)
।