কেন আমি লিখিত () তে একটি নতুন লাইনের জন্য একটি স্ট্রিং ব্যবহার করতে পারছি না তবে আমি এটি লিখিতভাবে () এ ব্যবহার করতে পারি?
ধারণাটি নিম্নলিখিত: আপনি যদি একটি একক স্ট্রিং লিখতে চান তবে আপনি এটি দিয়ে এটি করতে পারেন write()
। আপনার যদি স্ট্রিংগুলির ক্রম থাকে তবে আপনি সেগুলি ব্যবহার করে সব লিখতে পারেন writelines()
।
write(arg)
একটি স্ট্রিংকে আর্গুমেন্ট হিসাবে প্রত্যাশা করে এবং এটি ফাইলটিতে লিখে দেয়। আপনি যদি স্ট্রিংয়ের একটি তালিকা সরবরাহ করেন তবে এটি একটি ব্যতিক্রম বাড়াবে (উপায় দ্বারা, আমাদের ত্রুটিগুলি দেখান!)।
writelines(arg)
একটি পুনরাবৃত্তযোগ্যকে আর্গুমেন্ট হিসাবে প্রত্যাশা করে (একটি পুনরাবৃত্তযোগ্য অবজেক্টটি টিউপল, একটি তালিকা, একটি স্ট্রিং বা সবচেয়ে সাধারণ অর্থে পুনরুক্তি হতে পারে)। পুনরুক্তকারীতে থাকা প্রতিটি আইটেম স্ট্রিং হিসাবে প্রত্যাশিত। আপনি যে পরিমাণ স্ট্রিং সরবরাহ করেছেন তা হ'ল জিনিসগুলি কাজ করে।
স্ট্রিং (গুলি) এর প্রকৃতি উভয় ফাংশনের সাথেই আসে না, অর্থাত্ তারা আপনাকে যা কিছু দেবে তা কেবল তারা ফাইলে লেখেন। মজার অংশটি হ'ল এটি writelines()
নিজেরাইতে নিউলাইন চরিত্রগুলি যুক্ত করে না, সুতরাং পদ্ধতির নামটি আসলে বেশ বিভ্রান্তিকর হতে পারে। এটি প্রকৃতপক্ষে কল্পনা করা একটি কাল্পনিক পদ্ধতির মতো আচরণ করেwrite_all_of_these_strings(sequence)
।
প্রতিটি স্ট্রিংকে তার নিজের লাইনে রাখার সময় পাইথনে একটি স্ট্রিংয়ের তালিকা লেখার জন্য পাইথনের একটি মূmatic় উপায়টি যা নিম্নলিখিত:
lines = ['line1', 'line2']
with open('filename.txt', 'w') as f:
f.write('\n'.join(lines))
এটি আপনার জন্য ফাইলটি বন্ধ করার যত্ন নেয়। কনস্ট্রাক্ট '\n'.join(lines)
যোগসূত্র (সংযোগ স্থাপন করে) তালিকায় স্ট্রিং lines
এবং চরিত্র ব্যবহার '\ এন' আঠা হিসাবে। এটি +
অপারেটর ব্যবহারের চেয়ে বেশি দক্ষ ।
একই lines
ক্রম থেকে শুরু করে একই আউটপুট দিয়ে শেষ, তবে ব্যবহারwritelines()
:
lines = ['line1', 'line2']
with open('filename.txt', 'w') as f:
f.writelines("%s\n" % l for l in lines)
এটি একটি জেনারেটর এক্সপ্রেশন ব্যবহার করে এবং ডায়নামিকভাবে নতুন লাইন-সমাপ্ত স্ট্রিংগুলি তৈরি করে। writelines()
স্ট্রিংগুলির এই ক্রমটি পুনরাবৃত্তি করে এবং প্রতিটি আইটেম লেখেন।
সম্পাদনা করুন: অন্য একটি বিষয় সম্পর্কে আপনার সচেতন হওয়া উচিত:
write()
এবং চালু readlines()
করার আগে উপস্থিত writelines()
ছিল। writelines()
পরে এটির প্রতিচ্ছবি হিসাবে পরিচয় করিয়ে দেওয়া হয়েছিল readlines()
, যাতে সহজেই কেবল ফাইলটির মাধ্যমে পড়া পঠিত ফাইল সামগ্রী লিখতে পারে readlines()
:
outfile.writelines(infile.readlines())
সত্যিই, writelines
এরকম বিভ্রান্তিকর নাম থাকার মূল কারণ এটি। এছাড়াও, আজ, আমরা আসলে এই পদ্ধতিটি আর ব্যবহার করতে চাই না। ডেটা লিখতে শুরু করার readlines()
আগে পুরো ফাইলটি আপনার মেশিনের স্মৃতিতে পড়ে writelines()
। প্রথমত, এটি সময় নষ্ট করতে পারে। অন্যান্য অংশগুলি পড়ার সময় কেন ডেটা অংশগুলি লেখা শুরু করবেন না? তবে, সবচেয়ে গুরুত্বপূর্ণ, এই পদ্ধতির খুব স্মৃতি গ্রহণযোগ্য হতে পারে। চরম দৃশ্যে, যেখানে ইনপুট ফাইলটি আপনার মেশিনের মেমরির চেয়ে বড়, এই সমস্যাটির সমাধান হ'ল কেবল পুনরুক্তি ব্যবহারকারী। একটি কার্যকরী উদাহরণ:
with open('inputfile') as infile:
with open('outputfile') as outfile:
for line in infile:
outfile.write(line)
এটি লাইন দ্বারা ইনপুট ফাইল লাইন পড়ে। একটি লাইন পড়ার সাথে সাথে এই লাইনটি আউটপুট ফাইলে লেখা হবে। স্কিম্যাটিকভাবে কথিত, মেমোরিতে সর্বদা একটিমাত্র লাইন থাকে (পঠনলাইন / লিখনীকরণের পদ্ধতির ক্ষেত্রে মেমরির মধ্যে থাকা পুরো ফাইল সামগ্রীটির তুলনায়)।
lines
আপনার উদাহরণের একটি স্ট্রিং নয়। এটি ছয়টি স্ট্রিং সমন্বিত একটি টুপল।