1117 Stimmen

Wie kann ich die Dateigröße in Python überprüfen?

Wie kann ich die Größe einer Datei in Python ermitteln?

1469voto

danben Punkte 77356

Verwenden Sie os.path.getsize :

>>> import os
>>> os.path.getsize("/path/to/file.mp3")
2071611

Die Ausgabe erfolgt in Bytes.

1036voto

Adam Rosenfield Punkte 373807

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.

148voto

Mark E. Haase Punkte 24620

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)

104voto

Rajiv Sharma Punkte 5964
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

66voto

Michael Mulich Punkte 1158

使用方法 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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X