Python හි ගොනුවක හෝ නාමාවලියක (ෆෝල්ඩරය) ප්‍රමාණය ලබා ගැනීම

ව්යාපාරික

Python සම්මත library os භාවිතයෙන්, ඔබට ගොනුවක ප්‍රමාණය (ධාරිතාව) හෝ නාමාවලියක අඩංගු ගොනු වල සම්පූර්ණ ප්‍රමාණය ලබා ගත හැක.

පහත ක්‍රම තුන පැහැදිලි කර ඇත. ලබා ගත හැකි ප්රමාණවල ඒකක සියල්ලම බයිට් වේ.

  • ගොනුවේ විශාලත්වය ලබා ගන්න:os.path.getsize()
  • පහත ශ්‍රිතයන් (Python 3.5 හෝ ඊට පසු) ඒකාබද්ධ කිරීමෙන් නාමාවලියක ප්‍රමාණය ලබා ගන්න:os.scandir()
  • බහලුමේ ප්‍රමාණය ලබා ගැනීමට පහත ශ්‍රිතයන් ඒකාබද්ධ කරන්න (Python 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() භාවිතා කරන්න.

මෙම ශ්‍රිතය Python 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() හි follow_symlinks තර්කය අසත්‍ය ලෙස සකසන්න.

එසේම, ඔබට උප බහලුම් හරහා ගමන් කිරීමට අවශ්‍ය නැතිනම්, ඔබට පහත කොටස මකා දැමිය හැකිය.

            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