回答:
によって返されるオブジェクトのst_size
プロパティが必要です。(Python 3.4以降)を使用して取得できます。os.stat
pathlib
>>> from pathlib import Path
>>> Path('somefile.txt').stat()
os.stat_result(st_mode=33188, st_ino=6419862, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=1564, st_atime=1584299303, st_mtime=1584299400, st_ctime=1584299400)
>>> Path('somefile.txt').stat().st_size
1564
または使用os.stat
:
>>> import os
>>> os.stat('somefile.txt')
os.stat_result(st_mode=33188, st_ino=6419862, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=1564, st_atime=1584299303, st_mtime=1584299400, st_ctime=1584299400)
>>> os.stat('somefile.txt').st_size
1564
出力はバイト単位です。
stat_result.st_blocks
、ブロックサイズを掛けることができますが、プログラムやクロスプラットフォームで(tune2fs
>>> import os
>>> b = os.path.getsize("/path/isa_005.mp3")
>>> b
2071611
出力はバイト単位です。
os.path.getsize
は単純ですreturn os.stat(filename).st_size
os.stat
。次に、その差はかなりの数のマイクロ秒になる可能性があります:-)
他の答えは実際のファイルで機能しますが、「ファイルのようなオブジェクト」で機能するものが必要な場合は、これを試してください:
# f is a file-like object.
f.seek(0, os.SEEK_END)
size = f.tell()
私の限られたテストでは、実際のファイルとStringIOで動作します。(Pythonの2.7.3。)「オブジェクトファイルのような」APIはもちろん、実際には厳格なインタフェースではなく、APIのドキュメントでは、ファイルのようなオブジェクトがサポートしなければならないことを示唆しているseek()
とtell()
。
編集する
これとのもう1つの違いos.stat()
はstat()
、ファイルを読み取る権限がなくてもファイルを作成できることです。当然のことながら、ユーザーが読み取り権限を持っていない限り、シーク/テルアプローチは機能しません。
編集2
ジョナソンの提案で、これは偏執的なバージョンです。(上記のバージョンでは、ファイルポインターがファイルの末尾に残っているため、ファイルから読み取ろうとすると、0バイトが返されます。)
# f is a file-like object.
old_file_position = f.tell()
f.seek(0, os.SEEK_END)
size = f.tell()
f.seek(old_file_position, os.SEEK_SET)
os
。代わりにf.seek(0, 2)
、最後から0バイトをシークするために書き込みます。
os
は、使用されない場合:f.seek(old_file_position, 0)
os
。
size
出力はバイト単位ですか?
#seek()
:wiki.sei.cmu.edu/confluence/display/c/...
import os
def convert_bytes(num):
"""
this function will convert bytes to MB.... GB... etc
"""
for x in ['bytes', 'KB', 'MB', 'GB', 'TB']:
if num < 1024.0:
return "%3.1f %s" % (num, x)
num /= 1024.0
def file_size(file_path):
"""
this function will return the file size
"""
if os.path.isfile(file_path):
file_info = os.stat(file_path)
return convert_bytes(file_info.st_size)
# Lets check the file size of MS Paint exe
# or you can use any file path
file_path = r"C:\Windows\System32\mspaint.exe"
print file_size(file_path)
結果:
6.1 MB
return f'{num:.1f} {x}'
Python> = 3.5に変更できます。
使用pathlib
(Python 3.4で追加されたか、PyPIで利用可能なバックポート):
from pathlib import Path
file = Path() / 'doc.txt' # or Path('./doc.txt')
size = file.stat().st_size
これは実際にはのインターフェースにすぎませんos.stat
が、を使用pathlib
すると、他のファイル関連の操作に簡単にアクセスできます。
他のユニットbitshift
に変換したい場合に使うトリックがありbytes
ます。右シフトを行う場合は、10
基本的に順序(複数)でシフトします。
例:
5GB are 5368709120 bytes
print (5368709120 >> 10) # 5242880 kilobytes (kB)
print (5368709120 >> 20 ) # 5120 megabytes (MB)
print (5368709120 >> 30 ) # 5 gigabytes (GB)
#Get file size , print it , process it...
#Os.stat will provide the file size in (.st_size) property.
#The file size will be shown in bytes.
import os
fsize=os.stat('filepath')
print('size:' + fsize.st_size.__str__())
#check if the file size is less than 10 MB
if fsize.st_size < 10000000:
process it ....
Path('./doc.txt').stat().st_size