'tar' ইউটিলিটি মূলত Unix অপারেটিং সিস্টেমের জন্য পরিচয় করানো হয়েছিল। এর উদ্দেশ্য হলো একাধিক ফাইল একটি সিঙ্গল আর্কাইভ ফাইলে সংগ্রহ করা যাকে tarball বলা হয় যা ফাইলগুলো ডিস্ট্রিবিউট করা সহজ করে। পাইথনের স্ট্যান্ডার্ড লাইব্রেরির tarfile মডিউলের ফাংশনগুলো tar আর্কাইভ তৈরি করতে এবং tarball থেকে এক্সট্র্যাক্ট করতে সাহায্য করে। আর্কাইভগুলো gzip, bz2 এবং lzma কমপ্রেশন বা কোনো কমপ্রেশন ছাড়াই কনস্ট্রাক্ট করা যায়।
এই মডিউলে সংজ্ঞায়িত মূল ফাংশন হলো main() যার মাধ্যমে tar ফাইলে লেখা বা সেটি থেকে পড়া সম্পন্ন হয়।
Open()
এই ফাংশন ফাইল নাম যা এটিকে প্যারামিটার হিসেবে দেওয়া হয়, তার সাথে মিলে যাওয়া একটি TarFile অবজেক্ট রিটার্ন করে। ফাংশনটিকে mode নামে আরেকটি প্যারামিটার দরকার যা ডিফল্টভাবে 'r' কোনো কমপ্রেশন নির্দেশ করে। অন্যান্য মোডগুলো নিচে লিস্ট করা হলো:
| Sr.No. | Mode & action |
|---|---|
| 1 | 'r' or 'r:*' ট্রান্সপারেন্ট কমপ্রেশনসহ পড়ার জন্য খোলুন। |
| 2 | 'r:' কমপ্রেশন ছাড়া পড়ার জন্য খোলুন। |
| 3 | 'r:gz' gzip কমপ্রেশনসহ পড়ার জন্য খোলুন। |
| 4 | 'r:bz2' bzip2 কমপ্রেশনসহ পড়ার জন্য খোলুন। |
| 5 | 'r:xz' lzma কমপ্রেশনসহ পড়ার জন্য খোলুন। |
| 6 | 'x' or 'x:' এক্সক্লুসিভলি একটি tarfile তৈরি করুন কমপ্রেশন ছাড়া। |
| 7 | 'x:gz' gzip কমপ্রেশনসহ একটি tarfile তৈরি করুন। |
| 8 | 'x:bz2' bzip2 কমপ্রেশনসহ একটি tarfile তৈরি করুন। |
| 9 | 'x:xz' lzma কমপ্রেশনসহ একটি tarfile তৈরি করুন। |
| 10 | 'a' or 'a:' কমপ্রেশন ছাড়া অ্যাপেন্ড করার জন্য খোলুন। |
| 11 | 'w' or 'w:' আনকমপ্রেসড রাইটিং-এর জন্য খোলুন। |
| 12 | 'w:gz' gzip কমপ্রেসড রাইটিং-এর জন্য খোলুন। |
| 13 | 'w:bz2' bzip2 কমপ্রেসড রাইটিং-এর জন্য খোলুন। |
| 14 | 'w:xz' lzma কমপ্রেসড রাইটিং-এর জন্য খোলুন। |
মডিউল TarFile ক্লাস সংজ্ঞায়িত করে। open() ফাংশনের পরিবর্তে TarFile অবজেক্ট কনস্ট্রাক্টর কল করে ইনস্ট্যানশিয়েট করা যায়।
TarFile()
এই কনস্ট্রাক্টরও একটি ফাইল নাম এবং mode প্যারামিটার দরকার। mode প্যারামিটার সম্ভাব্য মানগুলো উপরের মত।
এই ক্লাসের অন্যান্য মেথডগুলো নিচে দেওয়া হলো:
add()
এই মেথড আর্কাইভে একটি ফাইল যোগ করে। মেথডটিকে একটি নাম দরকার যা হতে পারে ফাইলের নাম, ডিরেক্টরি, সিম্বলিক লিংক, শর্টকাট ইত্যাদি। ডিরেক্টরি ডিফল্টভাবে রিকার্সিভলি যোগ হয়। রিকার্সিভ যোগ রोकতে recursive প্যারামিটার False সেট করুন।
addfile()
এই মেথড আর্কাইভে TarInfo অবজেক্ট যোগ করে।
extractall()
এই মেথড আর্কাইভের সকল মেম্বার বর্তমান পাথে এক্সট্র্যাক্ট করে যদি অন্য কোনো পাথ স্পষ্টভাবে প্রদান না করা হয়।
extract()
এই মেথড নির্দিষ্ট মেম্বারকে দেওয়া পাথে এক্সট্র্যাক্ট করে, ডিফল্ট হলো বর্তমান পাথ।
নিচের উদাহরণ একটি tar ফাইল gzip অ্যালগরিদমের সাথে কমপ্রেশন জন্য খোলে এবং সেটিতে একটি ফাইল যোগ করে।
>>> fp = tarfile.open("zen.tar.gz", "w:gz")
>>> fp.add("zen.txt")
>>> fp.close()
ধরে নিচ্ছি 'zen.txt' ফাইল বর্তমান ওয়ার্কিং ডিরেক্টরিতে আছে, এটি 'zen.tar.gz' ফাইলে যোগ হবে।
নিচের কোড tar আর্কাইভ থেকে ফাইলগুলো এক্সট্র্যাক্ট করে এবং সকল ফাইল (এই কেসে শুধু একটি) বর্তমান ফোল্ডারে এক্সট্র্যাক্ট করে। ফলাফল যাচাই করতে, আপনি 'zen.txt' বর্তমান ফোল্ডার থেকে ডিলিট বা রিনেম করতে পারেন।
>>> fp = tarfile.open("zen.tar.gz", "r:gz")
>>> fp.extractall()
>>> fp.close()
আপনি দেখবেন 'zen.txt' ফাইল বর্তমান ডিরেক্টরিতে প্রদর্শিত হবে।
বর্তমান ডিরেক্টরির সকল ফাইল নিয়ে একটি tar তৈরি করতে, নিচের কোড ব্যবহার করুন:
import tarfile, glob
>>> fp = tarfile.open('file.tar', 'w')
>>> for file in glob.glob('*.*'):
fp.add(file)
>>> fp.close()
কমান্ড লাইন ইন্টারফেস
tar ফাইল তৈরি এবং এক্সট্রাকশন কমান্ড লাইন ইন্টারফেসের মাধ্যমে অর্জন করা যায়। উদাহরণস্বরূপ 'lines.txt' ফাইল একটি tar ফাইলে নিচের কমান্ড কমান্ড উইন্ডো থেকে এক্সিকিউট করে যোগ করা যায়:
C:\python36 >python -m tarfile -c line.tar lines.txt
নিচের কমান্ড লাইন অপশনগুলো ব্যবহার করা যায়:
| -l or --list | একটি tarfile-এ ফাইলগুলো লিস্ট করুন। |
| -c or --create | সোর্স ফাইল থেকে tarfile তৈরি করুন। |
| -e or --extract | tarfile এক্সট্র্যাক্ট করুন বর্তমান ডিরেক্টরিতে যদি output_dir স্পেসিফাই না করা হয়। |
| -t or --test | টেস্ট করুন tarfile ভ্যালিড কিনা। |
| -v or --verbose | ভার্বোস আউটপুট। |
নিচের কমান্ড লাইন line.tar কে কারেন্ট ডিরেক্টরির অধীনে newdir ফোল্ডারে এক্সট্র্যাক্ট করবে।
C:\python36>python -m tarfile -e line.tar newdir/
নিচের কমান্ড লাইন tar আর্কাইভের সকল ফাইল লিস্ট করবে।
C:\python36>python -m tarfile -l files.tar
tarfile মডিউল নিয়ে এই আর্টিকেলে এর ক্লাস এবং ফাংশনগুলো উদাহরণসহ আলোচনা করা হয়েছে।