Xem bên dưới để biết cách in kích thước tệp nhanh chóng và tương đối dễ đọc trong một dòng mã nếu bạn đã biết mình muốn gì. Những dấu gạch đầu dòng này kết hợp câu trả lời tuyệt vời của @ccpizza ở trên với một số thủ thuật định dạng tiện dụng Tôi đọc ở đây Làm thế nào để in số có dấu phẩy làm dấu phân cách hàng nghìn? .
Byte
print ('{:,.0f}'.format(os.path.getsize(filepath))+" B")
Kilobits
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<7))+" kb")
Kilobyte
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<10))+" KB")
Megabits
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<17))+" mb")
Megabyte
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<20))+" MB")
Gigabits
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<27))+" gb")
Gigabyte
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<30))+" GB")
Terabyte
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<40))+" TB")
Rõ ràng là họ cho rằng bạn biết đại khái dung lượng bạn sẽ xử lý ngay từ đầu, trong trường hợp của tôi (trình biên tập video tại South West London TV) là MB và đôi khi là GB cho video clip.
CẬP NHẬT SỬ DỤNG PATHLIB
Để trả lời nhận xét của Hildy, đây là gợi ý của tôi cho một cặp hàm nhỏ gọn (giữ mọi thứ ở dạng 'nguyên tử' thay vì hợp nhất chúng) chỉ bằng cách sử dụng thư viện chuẩn Python:
from pathlib import Path
def get_size(path = Path('.')):
""" Gets file size, or total directory size """
if path.is_file():
size = path.stat().st_size
elif path.is_dir():
size = sum(file.stat().st_size for file in path.glob('*.*'))
return size
def format_size(path, unit="MB"):
""" Converts integers to common size units used in computing """
bit_shift = {"B": 0,
"kb": 7,
"KB": 10,
"mb": 17,
"MB": 20,
"gb": 27,
"GB": 30,
"TB": 40,}
return "{:,.0f}".format(get_size(path) / float(1 << bit_shift[unit])) + " " + unit
>>> format_size("d:\\media\\bags of fun.avi")
'38 MB'
>>> format_size("d:\\media\\bags of fun.avi","KB")
'38,763 KB'
>>> format_size("d:\\media\\bags of fun.avi","kb")
'310,104 kb'