Выкарыстоўваючы OS стандартнай бібліятэкі Python, вы можаце атрымаць памер (ёмістасць) файла або агульны памер файлаў, якія змяшчаюцца ў каталогу.
Наступныя тры метады тлумачацца. Адзінкі памераў, якія можна атрымаць, – гэта ўсе байты.
- Атрымаць памер файла:
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(), каб вызначыць, файл гэта ці каталог. Калі гэта файл, памер атрымліваецца з атрыбуту st_size аб’екта stat_result. У выпадку з каталогам гэтая функцыя выклікаецца рэкурсіўна, каб скласці ўсе памеры і вярнуць агульны памер.
Акрамя таго, па змаўчанні is_file() вяртае TRUE для сімвалічных спасылак на файлы. Таксама is_dir() вяртае праўду для сімвалічных спасылак на каталогі. Калі вы хочаце ігнараваць сімвалічныя спасылкі, усталюйце аргумент follow_symlinks is_file() і is_dir() у false.
Акрамя таго, калі вам не трэба пераходзіць па падкаталогах, вы можаце проста выдаліць наступную частку.
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