কম্পিউটার

পাইথনে একাধিক ইনপুট স্ট্রীম থেকে লাইনের উপর পুনরাবৃত্তি করুন


পাইথনের অন্তর্নির্মিত ওপেন() ফাংশন একটি ফাইল রিড/রাইট মোডে খোলে এবং এটিতে রিড/রাইট অপারেশন করে। একটি ব্যাচের একাধিক ফাইলে প্রক্রিয়াকরণ করতে, একজনকে ফাইলইনপুট ব্যবহার করতে হবে পাইথনের স্ট্যান্ডার্ড লাইব্রেরির মডিউল। এই মডিউলটি ফাইলের উপর পুনরাবৃত্তি করার কার্যকারিতা সহ একটি ফাইলইনপুট ক্লাস প্রদান করে। মডিউল একই উদ্দেশ্যে সহায়ক ফাংশন সংজ্ঞায়িত করে।

এই মডিউলের প্রাথমিক ইন্টারফেস হল ইনপুট() ফাংশন এই ফাংশনটি ফাইলইনপুট ক্লাসের উদাহরণ প্রদান করে।

fileinput.input(files, inplace, mode)

ফাইল প্যারামিটার হল এক বা একাধিক ফাইলের নাম যা একে একে পড়তে হবে। প্রতিটি ফাইল একটি জেনারেটর হিসাবে কাজ করে এবং একটি লুপ ব্যবহার করে এটি পুনরাবৃত্তি করা যেতে পারে। ফাইলের প্রতিটি লাইন পাইথন কনসোলে প্রিন্ট করা হবে।

>>> for line in fileinput.input('data.txt'):
print (line)

ফাইল প্যারামিটার অনেক ফাইল সমন্বিত একটি tuple হতে পারে. ফাইলের বিষয়বস্তু একে একে প্রদর্শিত হবে।

>>> for line in fileinput.input(files=('a.txt', 'b.txt')):
print (line)

ফাইলইনপুট ক্লাসটি বিবৃতি সহ একটি প্রসঙ্গ ব্যবস্থাপকও ব্যবহার করা যেতে পারে।

>>> with fileinput.input(files=('a.txt', 'b.txt')) as f:
for line in f:
print (line)

ফাইলইনপুট মডিউলে নিম্নলিখিত ফাংশন সংজ্ঞায়িত করা হয়েছে।

Sr.No. ফাংশন এবং বর্ণনা
1 ফাইলের নাম()
বর্তমানে পঠিত ফাইলের নাম প্রদান করে।
2 ফাইলেনো()
ফাইল বর্ণনাকারী পূর্ণসংখ্যা প্রদান করে।
3 lineno()
পঠিত ফাইলের লাইন নম্বর প্রদান করে। সংখ্যাটি ক্রমবর্ধমান গণনা।
4 filelineno()
শুধুমাত্র বর্তমান ফাইলের লাইন নম্বর প্রদান করে।
5 isfirstline()
বর্তমান ফাইলের প্রথম লাইন পড়া হলে true রিটার্ন করে, অন্যথায় মিথ্যা

নিম্নলিখিত বিবৃতি ফাইলের প্রতিটি লাইন লাইন নম্বর সহ প্রিন্ট করে

>>> for line in fileinput.input('books.py'):
print ('{}->{}'.format(fileinput.filelineno(), line))

উপরের কোডের নমুনা আউটপুট হল

1->import sqlite3
2->conn = sqlite3.connect('c:/python36/books.db')
3->cursor = conn.cursor()
4->cursor.execute("SELECT * from books;")
5->print(cursor.fetchall())

নিম্নলিখিত কোড ফোল্ডারে প্রতিটি ফাইলের নাম মুদ্রণ করুন এবং এতে সংখ্যাযুক্ত লাইন অনুসরণ করুন। এই প্রোগ্রামে glob() ফাংশন ব্যবহার করা হয় যা বর্তমান পথের ফাইলের তালিকা ঐচ্ছিকভাবে মেলানো ওয়াইল্ড কার্ডের সাথে প্রদান করে। এখানে glob('*.py') বর্তমান ফোল্ডারে .py এক্সটেনশন সহ সমস্ত ফাইলের তালিকা ফিরিয়ে দেবে। এই তালিকাটি fileinput.input() ফাংশনে ফাইল প্যারামিটার হিসেবে ব্যবহৃত হয়।

import fileinput, glob, sys
for line in fileinput.input(glob.glob("*.py")):
if fileinput.isfirstline():
print (fileinput.filename(),'>')
sys.stdout.write ("{}.{}".format(fileinput.filelineno(),line))

isfirstline() ফাংশনের ব্যবহার লক্ষ্য করুন। যখন নতুন ফাইলের পুনরাবৃত্তি শুরু হয়, তখন এই ফাংশনটি true প্রদান করে এবং fileinput.filename() ফাংশন দ্বারা প্রত্যাবর্তিত ফাইলের নামটি প্রথমে প্রিন্ট করা হয় এবং তারপর সংখ্যা সহ লাইনগুলি প্রদর্শিত হয়। যেমন

1.py >
1.a = 10
2.b = 20
3.print ('addition=',a+b)
hello.py >
1.x = 10
2.y = 20
3.z = x+y
4.print ("x+y=",z)

ইনপ্লেস প্যারামিটার

ডিফল্টরূপে, inplace =False for fileinput.input() ফাংশন। যদি এটি True তে সেট করা থাকে, তাহলে এটি ইনপুট ফাইলটিকে লেখার যোগ্য করে তোলে।

অনুমান করা হচ্ছে যে এটিতে নিম্নলিখিত পাঠ্য সহ একটি 'msg.txt' রয়েছে৷

Hello Python. Good morning

নিম্নলিখিত কোড ফাইলইনপুট মডিউল ব্যবহার করে ফাইলটি খোলে এবং এর বিষয়বস্তু পরিবর্তন করে।

>>> for line in fileinput.input(files='msg.txt',inplace = True):
line = line.replace('morning', 'evening')
sys.stdout.write(line)
প্রাক>

'msg.txt' করা পরিবর্তনগুলি দেখাবে৷


  1. জাভাতে এক লাইনে ব্যবহারকারীর থেকে একাধিক মান কীভাবে ইনপুট করবেন?

  2. কনসোল থেকে ইনপুট পড়ার জন্য পাইথন প্রোগ্রাম

  3. Python Pandas - কিভাবে একটি DataFrame থেকে একাধিক সারি নির্বাচন করবেন

  4. কিভাবে একটি Python tkinter ক্যানভাস থেকে লাইন মুছে ফেলা যায়?