必要なものがすでにわかっている場合に、ファイルサイズを1行のコードで印刷するための、すばやく比較的読みやすい方法については、以下を参照してください。これらのワンライナーは、上記の@ccpizzaによる優れた回答と、ここで読んだいくつかの便利な書式設定のトリックを組み合わせたものです。カンマを使用して数値を千の区切り記号として出力する方法は?。
バイト
print ('{:,.0f}'.format(os.path.getsize(filepath))+" B")
キロビット
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<7))+" kb")
キロバイト
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<10))+" KB")
メガビット
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<17))+" mb")
メガバイト
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<20))+" MB")
ギガビット
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<27))+" gb")
ギガバイト
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<30))+" GB")
テラバイト
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<40))+" TB")
明らかに、彼らはあなたが最初に扱う予定のサイズを大まかに知っていると想定しています。私の場合(South West London TVのビデオエディタ)はMBであり、ビデオクリップの場合はGBです。
PATHLIBを使用した更新
Hildyのコメントへの返信として、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'