মজার ও সহজ প্রোগ্রামিং, পাইথন প্রোগ্রামিং [পর্ব-১৬] :: পাইথনে সিস্টেম প্রোগ্রামিং ( অপারেটিং সিস্টেম ও ফাইল নিয়ে কাজ )

0
525

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

আজকে আমরা OS নামক একটা মডিউল নিয়ে কাজ করব । এই মডিউলের কাজ হল অপারেটিং সিস্টেম সম্পর্কিত কাজগুলো করা । তাই সবসময় প্রথমে আমরা OS মডিউল টা ইমপোর্ট করে নেব ।

সর্ব প্রথমে নিচের কোড গুলো লিখুন । এর কাজ নিচের কোড গুলোর কাজ হল আপনি পাইথন IDLE তে কোন ডাইরেক্টরিতে কাজ করছেন সেটা বলে দেওয়া । মানে আপনার প্রোগ্রামটা কোথায় সেভ করা আছে সেটা ।

import os
p = os.getcwd()
print(p)

এখানে মূলত কোডটি হল p = os.getcwd() । এর মাধ্যমে আমরা একটি ভ্যারিয়েবল নিয়ে আমাদের কারেন্ট ওয়ার্কিং ডাইরেক্টরিরিটার্ণ করেছি । তারপর ভ্যারিয়েবলটা প্রিন্ট করে আমরা আমাদের কারেন্ট ওয়ার্কিং ডাইরেক্টরি টা দেখেছি ।

এরপর আবার নিচের কোডগুলি লিখুন । এই কোডগুলির কাজ হবে আপনি ধরুন একটা ডাইরেক্টরিতে একটা ফাইল খোজ করছেন । এখন সেই ফাইল সম্পর্কে বিস্তারিত তথ্য আপনকে জানাবে এই কোডগুলো ।

import os
r = os.access("E:\Avast(Latest)\key.txt", os.F_OK)
print("Is the file path exit? ", r)

r = os.access("E:\Avast(Latest)\key.txt", os.R_OK)
print("Is is readable ? ", r)

r = os.access("E:\Avast(Latest)\key.txt", os.W_OK)
print ("Is it writable? ", r)

r = os.access("E:\Avast(Latest)\key.txt", os.X_OK)
print ("is it executable ?  ",r)

দেখুন , এখানে আমরা প্রথমে একটা ফাইল আছে কিনা তা পরীক্ষা করেছি r নামের একটা ভ্যারিয়েবল নিয়ে os.F_OK কোড টার মাধ্যমে । তারপর এটি আছে কি নেই তা প্রিন্ট করেছি । যদি ফাইলটা থাকে তবে এটি ট্রু রিটার্ণ করবে । আর না থাকলে ফলস রিটার্ণ করবে ।
তারপর , একই ভাবে আমরা os.R_OK ,, os.W_OK,,os.X_OK কোডগুলিণ দ্বারা ফাইলটি রিডেবল কিনা , রাইটেবল কিনা , ও এক্সিকিউটেবল কিনা , তা পরীক্ষা করেছি । হলে ট্রু , আর না হলে ফলস রিটার্ণ করেছে । এই দেখুন এই কোড এর ফলাফল :

Is the file path exit?  True
Is is readable ?  True
Is it writable?  True
is it executable ?   True

এবার দেখুন , কীভাবে একটা ফাইলের ওয়ার্কিং ডাইরেক্টরি চেন্জ করতে হয় । সবাই নিচের কোডগুলি লিখুন ।

import os
path = ("E:\Software\iCare Data Recovery Software 4.3 Full")
r = os.getcwd()
print ("Current working directory ", r)
os.chdir( path )
r = os.getcwd()
print ("Directory changed successfully",  r)

দেখুন , এখানে আমরা প্রথমে path নারে একটা ভ্যারিয়েবল নিয়ে একটা ডাইরেক্টরি বলে দিয়েছি । তারপর আমরা আমাদের কারেন্ট ওয়ার্কিং ডাইরেক্টরি জেনেছি r = os.getcwd() দ্বারা । এবং আমরা আমাদের কারেন্ট ওয়ার্কিং ডাইরেক্টরি প্রিন্ট করেছি। তারপর os.chdir( path ) কোডটি দ্বারা আমরা আমাদের কারেন্ট ডাইরেক্টরি আমাদের উপরে দেখিয়ে দেওয়া Path এ ট্রান্সফার করেছি । তারপর আমরা আবারও আমাদের কারেন্ট ওয়ার্কিং ডাইরেক্টরি জেনেছি ও এটা আমাদের চেন্ঝ করা ডাইরেক্টরি টাই সো করেছে ।

এবার আমরা দেখব কীভাবে কোন ফাইল পড়তে হয় পাইথনের মাধ্যমে । আসুন আমরা সবাই নিচের কোডগুলো লিখি ।

import os
f = os.open("E:\Avast(Latest)\key.txt",os.O_RDWR)
r = os.read(f,27)
print (r)
os.close(f)
print( "Closed the file successfully!!")

দেখুন , এখানে আমরা প্রথমে f ভ্যারিয়েবলের মাধ্যমে আমাদের কাঙ্খিত ফাইলটা ওপেন করেছি । এরপর আমরা os.read(f,12) এর মাধ্যমে এর ভিতর কী লেখা আছে তা পড়েছি ও তারপর সেটা প্রিন্ট করেছি । তারপর ফাইলটা ক্লোজ করে দিয়েছি । আমি এখানে (f,27) লিখেছি কারণ আমি ২৭ টি অক্ষর বা সংখ্যা পড়তে চাই । আপনি এ সংখ্যাটি পাল্টে নিজের মত করে নিতে পারেন আপনি যে কয়টি সংখ্যা পড়তে চান সে কয়টি ।

এরপর আসুন দেখে নিই কীভাবে একটা ফাইলের পরিসংখ্যান করতে হয় । সবাই নিচের কোডগুলো লিখুন ।

import os
statinfo = os.stat(arindam.py')
print(statinfo)

এই কোডটি আপনার ফাইলের পরিসংখ্যান সম্পর্কিত বিভিন্ন তথ্য দেখাবে । আসুন দেখে নিই কোন তথ্যের কী মানে ।

st_mode: protection bits.
    st_ino: inode number.
    st_dev: device.
    st_nlink: number of hard links.
    st_uid: user id of owner.
    st_gid: group id of owner.
    st_size: size of file, in bytes.
    st_atime: time of most recent access.
    st_mtime: time of most recent content modification.
    st_ctime: time of most recent metadata change.

এবার দেখুন কীভাবে একটা ফোল্ডারে কতগুলো ফাইল আছে তা কীভাবে দেখতে হয় ও কীভাবে ফাইলের রিনেম করতে হয় । সবাই নিচের কোডগুলো লিখুন :

import os
f = os.listdir(os.getcwd())
print ("The dir is: ",f)
os.rename("oldname","newname")
print ("Successfully renamed.")
print ("the dir is: ",os.listdir(os.getcwd()))

দেখুন , এখানে আমি প্রথমে আমাদের কারেন্ট ওয়ার্কিং ডাইরেক্টরিতে ফাইললিস্ট রিটার্ণ করেছি । তারপর সেটা প্রিন্ট করেছি । এরপর আমরা os.rename(“oldname”,”newname”) কোড দ্বারা আমারে পুরান ফাইল নেম পরিবর্তন করে নতুন নাম দিয়েছি । এখানে আপনারা যে ফাইলের নাম পরিবর্তন করতে চান ওল্ডফাইল নেম এর স্থলে সেই নাম , ও নিউ ফাইলসেম এর স্থলে নতুন নাম বসাবেন । এরপর আমরা আবার ডাইরেক্টরির সকল ফাইলের নাম প্রিন্ট করেছি print (“the dir is: “,os.listdir(os.getcwd())) কোড দ্বারা ।

এবার আমরা দেখব কীভাবে একটা ফাইল ডিলিট করতে হয় । এটা খুবই সিম্পল । সবাই নিচের কোডগুলি লিখুন ।

import os
print ("The dir is: ",os.listdir(os.getcwd()))
os.remove("aa.txt")
print( "The dir after removal of path : ",os.listdir(os.getcwd()))

দেখুন , এখানে আমরা প্রথমে কারেন্ট ডাইরেক্টরির ফাইল গুলি প্রিন্ট করেছি print (“The dir is: “,os.listdir(os.getcwd())) কোড দ্বারা । এরপর তাদের মধ্যে aa.txt নামের একটা ফাইল আমরা রিমুভ করেছি উপোরোক্ত কোড দ্বারা । তারপর সেই ফাইল রিমুভ হয়েছে কিনা সেটা সিওর হবার জন্য আমরা আবারও ডাইরেক্টরির ফাইলগুলি প্রিন্ট করে দেখেছে । আপনারা কারেন্ট ডাইরেক্টরির ফাইল প্রিন্ট না করে ডাইরেক্টলি ফাইল প্যাথ বনিয়ে ফাইল ডিলিট করতেও পারেন ।

এবার আমরা দেখব পাইথনে OS মডিউল দিয়ে কীভাবে ফাইল নিয়ে কত প্রকার কাজ করা যায় । আসুন আমরা দেখে নিই । সবাই নিচের কোডটি লিখুন ।

import os
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
os.write(fd, "This is test")
os.close( fd )
print ("Closed the file successfully!!")

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

os.O_RDONLY : open for reading only

os.O_WRONLY : open for writing only

os.O_RDWR  : open for reading and writing

os.O_NONBLOCK : do not block on open

os.O_APPEND : append on each write

os.O_CREAT : create file if it does not exist

os.O_TRUNC : truncate size to 0

os.O_EXC L: error if create and file exists

os.O_SHLOCK : atomically obtain a shared lock

os.O_EXLOCK : atomically obtain an exclusive lock

os.O_DIRECT: eliminate or reduce cache effects

os.O_FSYNC : synchronous writes

os.O_NOFOLLOW : do not follow symlinks

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

কিছুদিন আগে ফেসবুকে একজন আমাকে জিজ্ঞাসা করেছিলেন যে > পাইথনের জন্য কোন কম্পাইলার আছে কিনা । আসলে আমার পাইথনের কোন কম্পাইলরের কথা জানা নেই । তবে পাইথন ২.৭ পর্যন্ত যেকোন প্রোগ্রামকে .exe তে মাইগ্রেট করা যায় py2exeনামক একটা সফটওয়ার দিয়ে । আর পাইথনের IDLE ই হল পাইথনের জন্য কম্পাইলর । আপনার py2exe ইউজ করতে হলে পাইথন ২.৭ এর উপর একটু ধারণা রাখতে হবে ।কারণ এটার সর্বশেষ রিলিজ হল পাইথন ২.৭ এর জন্য । এটা এখান থেকে ডাউনলোড করতে পারেন । আর আশা করছি পাইথন ৩.৩ এর জন্যও py2exe এর ভার্সন খুবই দ্রুত বের হবে । আর যদি কেউ ট্রাই করতে চান অন্যভাবে , তাহলে গুগলে সার্চ দিয়ে দেখতে পারেন । আরেকটা সফটওয়ার আমার জানা আছে যেটার নাম হল CYTHON । এটা এখান থেকে ডাউনলোড করতে পারেন ।

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

Please comment Here (ভাল লাগলে কমেন্ট করুন)