Wie kann ich die Größe einer Datei in Python ermitteln?
Antworten
Zu viele Anzeigen?Verwenden Sie os.path.getsize
:
>>> import os
>>> os.path.getsize("/path/to/file.mp3")
2071611
Die Ausgabe erfolgt in Bytes.
Sie benötigen die st_size
Eigenschaft von das Objekt, das von os.stat
. Sie können es entweder über pathlib
(Python 3.4+):
>>> 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
oder mit 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
Die Ausgabe erfolgt in Bytes.
Die anderen Antworten funktionieren für echte Dateien, aber wenn Sie etwas brauchen, das für "dateiähnliche Objekte" funktioniert, versuchen Sie dies:
# f is a file-like object.
f.seek(0, os.SEEK_END)
size = f.tell()
Es funktioniert für echte Dateien und StringIO's, in meinem begrenzten Tests. (Python 2.7.3.) Die "dateiähnliche Objekt"-API ist natürlich nicht wirklich eine strenge Schnittstelle, aber die API-Dokumentation schlägt vor, dass dateiähnliche Objekte Folgendes unterstützen sollten seek()
y tell()
.
bearbeiten
Ein weiterer Unterschied zwischen diesem und os.stat()
ist, dass Sie stat()
eine Datei, auch wenn Sie keine Leseberechtigung haben. Natürlich funktioniert der seek/tell-Ansatz nicht, wenn Sie keine Leseerlaubnis haben.
Bearbeiten 2
Auf Jonathons Vorschlag hin, hier eine paranoide Version. (Die obige Version lässt den Dateizeiger am Ende der Datei stehen, so dass Sie beim Versuch, aus der Datei zu lesen, null Bytes zurückbekommen würden).
# 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)
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
使用方法 pathlib
( hinzugefügt in Python 3.4 oder ein Backport verfügbar auf PyPI ):
from pathlib import Path
file = Path() / 'doc.txt' # or Path('./doc.txt')
size = file.stat().st_size
Dies ist wirklich nur eine Schnittstelle um os.stat
sondern mit pathlib
bietet eine einfache Möglichkeit, auf andere dateibezogene Operationen zuzugreifen.
- See previous answers
- Weitere Antworten anzeigen