பைதான் நிலையான நூலக OS ஐப் பயன்படுத்தி, ஒரு கோப்பின் அளவு (திறன்) அல்லது ஒரு கோப்பகத்தில் உள்ள கோப்புகளின் மொத்த அளவைப் பெறலாம்.
பின்வரும் மூன்று முறைகள் விளக்கப்பட்டுள்ளன. பெறக்கூடிய அளவுகளின் அலகுகள் அனைத்தும் பைட்டுகள்.
- கோப்பின் அளவைப் பெறுங்கள்:
os.path.getsize()
- பின்வரும் செயல்பாடுகளை (Python 3.5 அல்லது அதற்குப் பிறகு) இணைப்பதன் மூலம் ஒரு கோப்பகத்தின் அளவைப் பெறுங்கள்:
os.scandir()
- கோப்பகத்தின் அளவைப் பெற பின்வரும் செயல்பாடுகளை இணைக்கவும் (பைதான் 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() ஐப் பயன்படுத்தவும்.
இந்த செயல்பாடு பைதான் 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 வாதத்தை 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()
பைதான் 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