Duke përdorur sistemin operativ standard të bibliotekës Python, ju mund të merrni madhësinë (kapacitetin) e një skedari ose madhësinë totale të skedarëve të përfshirë në një direktori.
Tre metodat e mëposhtme janë shpjeguar. Njësitë e madhësive që mund të merren janë të gjitha bajt.
- Merrni madhësinë e skedarit:
os.path.getsize()
- Merrni madhësinë e një drejtorie duke kombinuar funksionet e mëposhtme (Python 3.5 ose më vonë):
os.scandir()
- Kombinoni funksionet e mëposhtme për të marrë madhësinë e drejtorisë (Python 3.4 dhe më herët):
os.listdir()
Merrni madhësinë e skedarit:os.path.getsize()
Madhësia (kapaciteti) i skedarit mund të merret me os.path.getsize().
Jepni shtegun e skedarit, madhësia e të cilit dëshironi të merrni si argument.
import os
print(os.path.getsize('data/src/lena_square.png'))
# 473831
Merrni madhësinë e një drejtorie (dosje):os.scandir()
Për të llogaritur madhësinë totale të skedarëve të përfshirë në një direktori (dosje), përdorni os.scandir().
Ky funksion u shtua në Python 3.5, kështu që versionet e mëparshme përdorin os.listdir(). Shembulli os.listdir() përshkruhet më vonë.
Përcaktoni një funksion si më poshtë.
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() kthen një përsëritës të objektit os.DirEntry.
Objekti DirEntry, përdorni metodat is_file() dhe is_dir() për të përcaktuar nëse është një skedar apo një drejtori. Nëse është një skedar, madhësia merret nga atributi st_size i objektit stat_result. Në rastin e një drejtorie, ky funksion thirret në mënyrë rekursive për të mbledhur të gjitha madhësitë dhe për të kthyer madhësinë totale.
Përveç kësaj, si parazgjedhje, is_file() kthen TRUE për lidhjet simbolike me skedarët. Gjithashtu, is_dir() kthen true për lidhjet simbolike të drejtorive. Nëse dëshironi të shpërfillni lidhjet simbolike, vendosni argumentin follow_symlinks të is_file() dhe is_dir() në false.
Gjithashtu, nëse nuk keni nevojë të kaloni nëpër nëndrejtori, thjesht mund të fshini pjesën e mëposhtme.
elif entry.is_dir():
total += get_dir_size(entry.path)
Funksioni i mësipërm do të dështojë nëse shtegu i skedarit kalohet si argument. Nëse ju nevojitet një funksion për të kthyer madhësinë e një skedari ose një drejtorie, mund të shkruani sa më poshtë.
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
Merrni madhësinë e një drejtorie (dosje):os.listdir()
Nuk ka os.scandir() në Python 3.4 ose më herët, prandaj përdorni os.listdir().
Përcaktoni një funksion si më poshtë.
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
Ideja bazë është e njëjtë si në rastin e os.scandir().
Ajo që mund të merret me os.listdir() është një listë me emrat e skedarëve (emrat e drejtorive). Çdo emër skedari ose emër drejtorie bashkohet me shtegun e drejtorisë prind me os.path.join() për të krijuar shtegun e plotë.
Nëse objektivi është një lidhje simbolike, os.path.isfile() dhe os.path.isdir() do të gjykojnë entitetin. Pra, nëse doni të shpërfillni lidhjet simbolike, përdorni gjykimin e kushtëzuar në kombinim me os.path.islink(), i cili kthehet i vërtetë për lidhjet simbolike.
Ashtu si në rastin e os.scandir(), nëse nuk keni nevojë të kaloni nëpër nëndrejtori, thjesht fshini pjesën e mëposhtme.
elif os.path.isdir(full_path):
total += get_dir_size_old(full_path)
Funksioni i mësipërm do të dështojë nëse shtegu i skedarit kalohet si argument. Nëse ju nevojitet një funksion për të kthyer madhësinë e një skedari ose një drejtorie, mund të shkruani sa më poshtë.
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