Im Folgenden finden Sie eine schnelle und relativ einfach zu lesende Methode zum Drucken von Dateigrößen in einer einzigen Codezeile, wenn Sie bereits wissen, was Sie möchten. Diese Einzeiler kombinieren die großartige Antwort von @ccpizza oben mit einigen praktischen Formatierungstricks, die ich hier gelesen habe. Wie drucke ich Zahlen mit Kommas als Tausendertrennzeichen? .
Bytes
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")
Gigabit
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")
Offensichtlich gehen sie davon aus, dass Sie ungefähr wissen, mit welcher Größe Sie zu Beginn zu tun haben. In meinem Fall (Video-Editor bei South West London TV) ist dies MB und gelegentlich GB für Videoclips.
UPDATE MIT PATHLIB
Als Antwort auf Hildys Kommentar ist hier mein Vorschlag für ein kompaktes Funktionspaar (Dinge "atomar" halten, anstatt sie zusammenzuführen), das nur die Python-Standardbibliothek verwendet:
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'