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

মজার ও সহজ পাইথন প্রোগ্রামিং

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

আজকে আমরা 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 । এটা এখান থেকে ডাউনলোড করতে পারেন ।

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

সবাই ভাল থাকবেন । আশা করি আবার দেখা হবে । ধন্যবাদ ।

Level 2

আমি অরিন্দম পাল। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 11 বছর 10 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 81 টি টিউন ও 316 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 20 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।

মানসিক ভাবে দূর্বল । কোন কাজই কনফিডেন্টলি করতে পারি না , তবুও দেখি কাজ শেষ পর্যন্ত হয়ে যায় । নিজের সম্পর্কে এক এক সময় ধারণা এক এক রকম হয় । আমার কোন বেল ব্রেক নেই । সকালে যে কাজ করব ঠিক করি , বিকালে তা করতে পারি না । নিজের...


টিউনস


আরও টিউনস


টিউনারের আরও টিউনস


টিউমেন্টস

Level 0

পাইথন প্রোগ্রামিং এর মাধ্যেমে কিভাবে web scraping করা যায়, যদি এর উপরে একটি টিউটোরিয়াল লিখতেন তাহলে অনেক উপকৃত হতাম। ধন্যবাদ আপনার মূল্যবান টিউন এর জন্য।

অভিনন্দন ভাই আবার ফিরে আশার জন্য।

Thank you sajal vai. Many many thanks.

Monir brother, i have an idea to write on that topic. Wait for a few days please. In python, it’s called CGI programming. It’s an interesting topic too. Thank you for your valuable comment.

kub vlo tune ! Next tune er opakkay roilam !

অনেক ধন্যবাদ ভাই টিউন টি চালিয়ে যাওয়ার জন্য।

    @Ashikur Rahman: @রাজ্: ভাই, আপনাদের আনেক অনেক ও অনেক ধন্যবাদ ।