Poniżej znajdziesz szybki i stosunkowo łatwy do odczytania sposób drukowania rozmiarów plików w jednej linii kodu, jeśli już wiesz, czego chcesz. Te jednowierszowe łączą świetną odpowiedź @ccpizza powyżej z przydatnymi sztuczkami formatowania, które przeczytałem tutaj. Jak wydrukować liczbę przecinkami jako separatorami tysięcy? .
Bajty
print ('{:,.0f}'.format(os.path.getsize(filepath))+" B")
Kilobity
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<7))+" kb")
Kilobajty
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<10))+" KB")
Megabity
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<17))+" mb")
Megabajtów
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<20))+" MB")
Gigabity
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<27))+" gb")
Gigabajty
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<30))+" GB")
Terabajty
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<40))+" TB")
Oczywiście zakładają, że wiesz z grubsza, z jakim rozmiarem będziesz mieć do czynienia na początku, który w moim przypadku (edytor wideo w telewizji South West London) wynosi MB, a czasami GB dla klipów wideo.
AKTUALIZACJA ZA POMOCĄ PATHLIB
W odpowiedzi na komentarz Hildy'ego , oto moja sugestia dotycząca zwartej pary funkcji (utrzymywanie elementów „atomowych” zamiast ich scalania) przy użyciu tylko standardowej biblioteki Pythona:
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'