Njupuk ukuran file utawa direktori (folder) ing Python

Bisnis

Nggunakake os perpustakaan standar Python, sampeyan bisa njaluk ukuran (kapasitas) file utawa ukuran total file sing ana ing direktori.

Telung cara ing ngisor iki diterangake. Unit ukuran sing bisa dipikolehi kabeh byte.

  • Entuk ukuran file:os.path.getsize()
  • Entuk ukuran direktori kanthi nggabungake fungsi ing ngisor iki (Python 3.5 utawa luwih anyar):os.scandir()
  • Gabungke fungsi ing ngisor iki kanggo entuk ukuran direktori (Python 3.4 lan sadurungé):os.listdir()

Entuk ukuran file:os.path.getsize()

Ukuran (kapasitas) file bisa dipikolehi karo os.path.getsize ().

Menehi path file sing ukurane sampeyan pengin entuk minangka argumen.

import os

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

Entuk ukuran direktori (folder):os.scandir()

Kanggo ngetung ukuran total file sing ana ing direktori (folder), nggunakake os.scandir ().

Fungsi iki ditambahake ing Python 3.5, supaya versi sadurungé nggunakake os.listdir (). os.listdir () conto diterangake mengko.

Nemtokake fungsi kaya ing ngisor iki.

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 () ngasilake iterator obyek os.DirEntry.

Objek DirEntry, gunakake metode is_file () lan is_dir () kanggo nemtokake manawa file utawa direktori. Yen file, ukuran dijupuk saka atribut st_size obyek stat_result. Ing kasus direktori, fungsi iki diarani rekursif kanggo nambah kabeh ukuran lan ngasilake ukuran total.

Kajaba iku, kanthi gawan, is_file () ngasilake TRUE kanggo pranala simbolis menyang file. Uga, is_dir () ngasilake bener kanggo pranala simbolis menyang direktori. Yen sampeyan pengin nglirwakake pranala simbolis, atur argumen follow_symlinks saka is_file () lan is_dir () dadi palsu.

Uga, yen sampeyan ora perlu ngliwati subdirektori, sampeyan mung bisa mbusak bagean ing ngisor iki.

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

Fungsi ing ndhuwur bakal gagal yen path file kasebut minangka argumen. Yen sampeyan butuh fungsi kanggo ngasilake ukuran file utawa direktori, sampeyan bisa nulis ing ngisor iki.

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

Entuk ukuran direktori (folder):os.listdir()

Ora ana os.scandir () ing Python 3.4 utawa sadurungé, supaya nggunakake os.listdir ().

Nemtokake fungsi kaya ing ngisor iki.

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

Ing idea dhasar padha ing kasus os.scandir ().

Apa bisa dipikolehi karo os.listdir () dhaftar jeneng berkas (jeneng direktori). Saben jeneng berkas utawa jeneng direktori digabungake karo path direktori induk karo os.path.join () kanggo nggawe path lengkap.

Yen target minangka link simbolis, os.path.isfile () lan os.path.isdir () bakal ngadili entitas kasebut. Dadi, yen sampeyan pengin nglirwakake pranala simbolis, gunakake paukuman kondisional ing kombinasi karo os.path.islink (), sing ngasilake bener kanggo pranala simbolis.

Kaya ing kasus os.scandir (), yen sampeyan ora perlu ngliwati subdirektori, mung mbusak bagean ing ngisor iki.

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

Fungsi ing ndhuwur bakal gagal yen path file kasebut minangka argumen. Yen sampeyan butuh fungsi kanggo ngasilake ukuran file utawa direktori, sampeyan bisa nulis ing ngisor iki.

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