Python ရှိ ဖိုင် သို့မဟုတ် လမ်းညွှန် (ဖိုင်တွဲ) အရွယ်အစားကို ရယူခြင်း။

စီးပွားရေးလုပ်ငန်း

Python စံပြစာကြည့်တိုက် os ကို အသုံးပြု၍ သင်သည် ဖိုင်တစ်ခု၏ အရွယ်အစား (စွမ်းရည်) သို့မဟုတ် လမ်းညွှန်တစ်ခုတွင်ပါရှိသော ဖိုင်များ၏ စုစုပေါင်းအရွယ်အစားကို သင်ရနိုင်သည်။

အောက်ပါနည်းလမ်းသုံးခုကို ရှင်းပြထားသည်။ ရရှိနိုင်သော အရွယ်အစားများ၏ ယူနစ်များသည် ဘိုက်များ အားလုံးဖြစ်သည်။

  • ဖိုင်အရွယ်အစားကိုရယူပါ။:os.path.getsize()
  • အောက်ပါလုပ်ဆောင်ချက်များကို ပေါင်းစပ်ခြင်းဖြင့် (Python 3.5 သို့မဟုတ် ထို့ထက်နောက်ပိုင်း) လမ်းညွှန်တစ်ခု၏ အရွယ်အစားကို ရယူပါ။:os.scandir()
  • လမ်းညွှန်၏အရွယ်အစားကိုရရှိရန် အောက်ပါလုပ်ဆောင်ချက်များကို ပေါင်းစပ်ပါ (Python 3.4 နှင့် အထက်):os.listdir()

ဖိုင်အရွယ်အစားကိုရယူပါ။:os.path.getsize()

ဖိုင်၏ အရွယ်အစား (capacity) ကို os.path.getsize() ဖြင့် ရယူနိုင်ပါသည်။

အငြင်းအခုံအဖြစ် သင်ရယူလိုသော ဖိုင်အရွယ်အစားကို လမ်းကြောင်းပေးပါ။

import os

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

လမ်းညွှန် (ဖိုင်တွဲ) ၏ အရွယ်အစားကို ရယူပါ:os.scandir()

directory (folder) တွင်ပါရှိသော ဖိုင်စုစုပေါင်းအရွယ်အစားကို တွက်ချက်ရန် os.scandir() ကိုသုံးပါ။

ဤလုပ်ဆောင်ချက်ကို Python 3.5 တွင် ထည့်သွင်းထားသောကြောင့် ယခင်ဗားရှင်းများတွင် os.listdir() ကို အသုံးပြုထားသည်။ os.listdir() ဥပမာကို နောက်ပိုင်းတွင် ဖော်ပြပါမည်။

အောက်ပါအတိုင်း function ကိုသတ်မှတ်ပါ။

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 object ၏ st_size attribute မှ အရွယ်အစားကို ရယူသည်။ လမ်းညွှန်တစ်ခုအတွက်၊ အရွယ်အစားအားလုံးကို ပေါင်းထည့်ကာ စုစုပေါင်းအရွယ်အစားကို ပြန်ပေးရန်အတွက် ဤလုပ်ဆောင်ချက်ကို ထပ်ခါတလဲလဲ ခေါ်သည်။

ထို့အပြင်၊ ပုံမှန်အားဖြင့်၊ is_file() သည် ဖိုင်များသို့ ပုံဆောင်လင့်ခ်များအတွက် TRUE ပြန်ပေးသည်။ ထို့အပြင် is_dir() သည် လမ်းညွှန်များဆီသို့ သင်္ကေတ လင့်ခ်များကို အမှန်အတိုင်း ပြန်ပေးသည်။ ပုံဆောင်လင့်ခ်များကို လျစ်လျူရှုလိုပါက၊ is_file() နှင့် is_dir() ၏ follow_symlinks အငြင်းအခုံကို false ဟု သတ်မှတ်ပါ။

ထို့အပြင်၊ သင်သည် subdirectories များကိုဖြတ်သန်းရန်မလိုအပ်ပါက၊ သင်သည်အောက်ပါအပိုင်းကိုဖျက်နိုင်သည်။

            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() ကိုသုံးပါ။

အောက်ပါအတိုင်း function ကိုသတ်မှတ်ပါ။

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() ၏ဖြစ်ရပ်တွင်ကဲ့သို့ပင်၊ သင်သည် subdirectories များကိုဖြတ်သန်းရန်မလိုအပ်ပါက၊ အောက်ပါအပိုင်းကိုဖျက်လိုက်ပါ။

        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