ਪਾਈਥਨ ਸਟੈਂਡਰਡ ਲਾਇਬ੍ਰੇਰੀ OS ਦੀ ਵਰਤੋਂ ਕਰਕੇ, ਤੁਸੀਂ ਇੱਕ ਫਾਈਲ ਦਾ ਆਕਾਰ (ਸਮਰੱਥਾ) ਜਾਂ ਇੱਕ ਡਾਇਰੈਕਟਰੀ ਵਿੱਚ ਮੌਜੂਦ ਫਾਈਲਾਂ ਦਾ ਕੁੱਲ ਆਕਾਰ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦੇ ਹੋ।
ਹੇਠਾਂ ਦਿੱਤੇ ਤਿੰਨ ਤਰੀਕੇ ਦੱਸੇ ਗਏ ਹਨ। ਅਕਾਰ ਦੀਆਂ ਇਕਾਈਆਂ ਜੋ ਪ੍ਰਾਪਤ ਕੀਤੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ, ਉਹ ਸਾਰੀਆਂ ਬਾਈਟਾਂ ਹਨ।
- ਫਾਈਲ ਦਾ ਆਕਾਰ ਪ੍ਰਾਪਤ ਕਰੋ:
os.path.getsize()
- ਹੇਠਾਂ ਦਿੱਤੇ ਫੰਕਸ਼ਨਾਂ ਨੂੰ ਜੋੜ ਕੇ ਇੱਕ ਡਾਇਰੈਕਟਰੀ ਦਾ ਆਕਾਰ ਪ੍ਰਾਪਤ ਕਰੋ (ਪਾਈਥਨ 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 ਆਰਗੂਮੈਂਟ ਨੂੰ ਗਲਤ ‘ਤੇ ਸੈੱਟ ਕਰੋ।
ਨਾਲ ਹੀ, ਜੇਕਰ ਤੁਹਾਨੂੰ ਸਬ-ਡਾਇਰੈਕਟਰੀਆਂ ਨੂੰ ਪਾਰ ਕਰਨ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ, ਤਾਂ ਤੁਸੀਂ ਹੇਠਾਂ ਦਿੱਤੇ ਹਿੱਸੇ ਨੂੰ ਮਿਟਾ ਸਕਦੇ ਹੋ।
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