পাইথনে একটি ফাইল বা ডিরেক্টরির (ফোল্ডার) আকার পাওয়া

ব্যবসায়

পাইথন স্ট্যান্ডার্ড লাইব্রেরি ওএস ব্যবহার করে, আপনি একটি ফাইলের আকার (ক্ষমতা) বা একটি ডিরেক্টরিতে থাকা ফাইলগুলির মোট আকার পেতে পারেন।

নিম্নলিখিত তিনটি পদ্ধতি ব্যাখ্যা করা হয়. প্রাপ্ত করা যেতে পারে যে মাপ একক সব বাইট.

  • ফাইলের আকার পান:os.path.getsize()
  • নিম্নলিখিত ফাংশনগুলিকে একত্রিত করে একটি ডিরেক্টরির আকার পান (পাইথন 3.5 বা পরবর্তী):os.scandir()
  • ডিরেক্টরির আকার পেতে নিম্নলিখিত ফাংশনগুলি একত্রিত করুন (পাইথন 3.4 এবং পূর্ববর্তী):os.listdir()

ফাইলের আকার পান:os.path.getsize()

ফাইলের আকার (ক্ষমতা) os.path.getsize() দিয়ে প্রাপ্ত করা যেতে পারে।

ফাইলের পাথ দিন যার সাইজ আপনি আর্গুমেন্ট হিসেবে পেতে চান।

import os

print(os.path.getsize('data/src/lena_square.png'))
# 473831

একটি ডিরেক্টরির আকার পান (ফোল্ডার):os.scandir()

একটি ডিরেক্টরিতে (ফোল্ডার) থাকা ফাইলগুলির মোট আকার গণনা করতে, os.scandir() ব্যবহার করুন।

এই ফাংশনটি পাইথন 3.5 এ যোগ করা হয়েছিল, তাই আগের সংস্করণ os.listdir() ব্যবহার করে। os.listdir() উদাহরণ পরে বর্ণনা করা হয়েছে।

নিম্নরূপ একটি ফাংশন সংজ্ঞায়িত করুন।

def get_dir_size(path='.'):
    total = 0
    with os.scandir(path) as it:
        for entry in it:
            if entry.is_file():
                total += entry.stat().st_size
            elif entry.is_dir():
                total += get_dir_size(entry.path)
    return total

print(get_dir_size('data/src'))
# 56130856

os.scandir() os.DirEntry অবজেক্টের একটি পুনরাবৃত্তিকারী প্রদান করে।

DirEntry অবজেক্ট, এটি একটি ফাইল বা ডিরেক্টরি কিনা তা নির্ধারণ করতে is_file() এবং is_dir() পদ্ধতি ব্যবহার করুন। যদি এটি একটি ফাইল হয়, আকারটি stat_result অবজেক্টের st_size বৈশিষ্ট্য থেকে প্রাপ্ত হয়। একটি ডিরেক্টরির ক্ষেত্রে, সমস্ত আকার যোগ করতে এবং মোট আকার ফেরত দিতে এই ফাংশনটিকে পুনরাবৃত্তিমূলকভাবে বলা হয়।

উপরন্তু, ডিফল্টরূপে, is_file() ফাইলের প্রতীকী লিঙ্কের জন্য TRUE প্রদান করে। এছাড়াও, is_dir() ডিরেক্টরিতে প্রতীকী লিঙ্কের জন্য সত্য ফেরত দেয়। আপনি যদি প্রতীকী লিঙ্কগুলিকে উপেক্ষা করতে চান তবে is_file() এবং is_dir() এর ফলো_সিমলিংক আর্গুমেন্টকে মিথ্যাতে সেট করুন।

এছাড়াও, যদি আপনাকে সাবডিরেক্টরিগুলি অতিক্রম করার প্রয়োজন না হয়, আপনি কেবল নিম্নলিখিত অংশটি মুছে ফেলতে পারেন।

            elif entry.is_dir():
                total += get_dir_size(entry.path)

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

def get_size(path='.'):
    if os.path.isfile(path):
        return os.path.getsize(path)
    elif os.path.isdir(path):
        return get_dir_size(path)

print(get_size('data/src'))
# 56130856

print(get_size('data/src/lena_square.png'))
# 473831

একটি ডিরেক্টরির আকার পান (ফোল্ডার):os.listdir()

Python 3.4 বা তার আগের কোনো os.scandir() নেই, তাই os.listdir() ব্যবহার করুন।

নিম্নরূপ একটি ফাংশন সংজ্ঞায়িত করুন।

def get_dir_size_old(path='.'):
    total = 0
    for p in os.listdir(path):
        full_path = os.path.join(path, p)
        if os.path.isfile(full_path):
            total += os.path.getsize(full_path)
        elif os.path.isdir(full_path):
            total += get_dir_size_old(full_path)
    return total

print(get_dir_size_old('data/src'))
# 56130856

মৌলিক ধারণা os.scandir() এর ক্ষেত্রে একই।

os.listdir() দিয়ে যা পাওয়া যায় তা হল ফাইলের নামের একটি তালিকা (ডিরেক্টরি নাম)। প্রতিটি ফাইলের নাম বা ডিরেক্টরির নাম সম্পূর্ণ পাথ তৈরি করতে os.path.join() দিয়ে মূল ডিরেক্টরির পাথের সাথে যুক্ত করা হয়।

যদি লক্ষ্যটি একটি প্রতীকী লিঙ্ক হয়, os.path.isfile() এবং os.path.isdir() সত্তার বিচার করবে। সুতরাং, আপনি যদি প্রতীকী লিঙ্কগুলিকে উপেক্ষা করতে চান, তাহলে os.path.islink() এর সাথে একত্রে শর্তসাপেক্ষ রায় ব্যবহার করুন, যা প্রতীকী লিঙ্কগুলির জন্য সত্য দেখায়।

os.scandir() এর ক্ষেত্রে যেমন, আপনার যদি সাবডিরেক্টরিগুলি অতিক্রম করার প্রয়োজন না হয় তবে নিচের অংশটি মুছে দিন।

        elif os.path.isdir(full_path):
            total += get_dir_size_old(full_path)

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

def get_size_old(path='.'):
    if os.path.isfile(path):
        return os.path.getsize(path)
    elif os.path.isdir(path):
        return get_dir_size_old(path)

print(get_size_old('data/src'))
# 56130856

print(get_size_old('data/src/lena_square.png'))
# 473831
Copied title and URL