Geekflare wird von unserem Publikum unterstützt. Es kann sein, dass wir durch den Kauf von Links auf dieser Seite Affiliate-Provisionen verdienen.
Unter Entwicklung Zuletzt aktualisiert: September 23, 2023
Weitergeben:
Invicti Web Application Security Scanner - die einzige Lösung, die eine automatische Überprüfung von Schwachstellen mit Proof-Based Scanning™ ermöglicht.

In diesem Artikel erfahren Sie, wie Sie die Größe einer Datei oder eines Ordners in Python überprüfen können

Python ist eine der vielseitigsten Programmiersprachen. Mit ihr können Sie von einem kleinen CLI-Programm (Command-line interface) bis hin zu einer komplexen Webanwendung alles erstellen

Eine der am meisten unterschätzten Funktionen ist jedoch die Fähigkeit, mit Betriebssystemen zu interagieren. Die Verwaltung von Betriebssystemen mit Python kann Ihnen bei der Erstellung von Automatisierungsprozessen eine Menge Zeit ersparen

Lassen Sie uns sehen, wie Python mit dem Betriebssystem interagiert

Wie interagiert Python mit dem Betriebssystem?

Python interacts with the Os with the os, sys, path and subprocess modules

Niemand kann isoliert von seiner Umgebung leben. Das gilt auch für Python, denn manchmal ist es unerlässlich, mit dem Betriebssystem zu interagieren, um Dinge zu erledigen

Python verfügt über mehrere Module, mit denen wir mit dem Betriebssystem interagieren können. Die am häufigsten verwendeten sind os, sys, pathlib und subprocess

Da es sich um eingebaute Module handelt, müssen Sie sie nicht mit PIP installieren. Sie können sie alle mit der folgenden Anweisung importieren

import os
import sys
import pathlib
import subprocess

In der folgenden Liste finden Sie die wichtigsten Funktionen jedes dieser Importe

  • Os: Portabler Weg, um systemspezifische Funktionen zu nutzen (abhängig von Ihrem Betriebssystem). Dies ist in den meisten Fällen die richtige Wahl, es sei denn, Sie benötigen etwas Fortgeschritteneres
  • Sys: Systemspezifische Parameter und Funktionen. Dieses Modul ermöglicht den Zugriff auf Interpreter-Variablen und -Funktionen. Das Modul os interagiert mit dem Betriebssystem und sys interagiert mit dem Python-Interpreter
  • Pathlib: Erweiterte Pfadverwendung. Ermöglicht es Ihnen, Dateisysteme als Objekte darzustellen, mit der entsprechenden Semantik für jedes Betriebssystem.
  • Unterprozess: Ausführung und Verwaltung von Unterprozessen direkt von Python aus. Dazu gehört die Arbeit mit stdin, stdout und Rückgabecodes. Mehr darüber erfahren Sie in unserem Python-Leitfaden zu Subprozessen.

Es gibt High-Level-Bibliotheken, die je nach Ihrem Bedarf noch spezifischere Funktionen enthalten. In den meisten Fällen sind Sie jedoch mit den oben genannten Modulen gut bedient

Hinweis: Die meisten der von diesen Modulen bereitgestellten Funktionen haben je nach Betriebssystem eine andere Ausgabe. Denken Sie daran, dass UNIX und Python normalerweise am besten zusammenpassen

Nachdem Sie nun wissen, wie Python mit dem Betriebssystem interagiert, wollen wir uns nun mit den Methoden zur Überprüfung der Datei- und Ordnergröße beschäftigen. Alle der folgenden Lösungen sind im Abschnitt Datei- und Ordnergröße im Python GitHub Repository verfügbar

Verwendung von os.stat().st_size

Bei dieser Methode verwenden wir die stat() -Funktion aus dem os-Modul. Sie liefert eine Vielzahl von Informationen über einen bestimmten Pfad

Hinweis: Die Funktion os.path.getsize() erledigt diese Aufgabe ebenfalls. Der Vorteil der Verwendung von os.stat().st_size ist, dass sie keine Simlinks verfolgt

Bevor wir fortfahren, lassen Sie uns eine Testdatei mit dem Namen lorem.txt erstellen, in die wir einen dummen Text einfügen werden. Wir können einen Lorem Ipsum Textgenerator besuchen und den Text in die Datei lorem.txt einfügen

Erstellen Sie im gleichen Verzeichnis eine Datei mit dem Namen method1.py und fügen Sie den folgenden Code ein

import os
size = os.stat('lorem.txt').st_size
print(size)

Schauen wir uns an, was wir mit diesem Code tun

  • In der ersten Zeile importieren wir das Modul os
  • Die Variable size enthält die Größe der Datei lorem.txt
    • Die Funktion os.stat() gibt eine Reihe von Informationen über die Datei zurück
    • Das Attribut st_size steht für die Größe der Datei
  • Wir drucken die Variable size aus

Versuchen Sie, das Python-Skript auszuführen. Je nach Inhalt der Datei lorem.txt werden Sie ein anderes Ergebnis erhalten

Ausgabe

20064

Die Ausgabe wird in Bytes dargestellt. Das ist überhaupt nicht lesbar, also lassen Sie uns die Datei humanisieren, damit wir eine bessere Vorstellung von der Größe der Datei bekommen

Installieren Sie zunächst das Paket humanize, indem Sie den folgenden Befehl in Ihrer Shell ausführen

pip install humanize

Dann können Sie die Funktion naturalsize() verwenden, die einen Wert in Bytes in eine lesbare Dateigröße umwandelt, zum Beispiel KB, MB, GB oder TB

import os
from humanize import naturalsize

size = os.stat('lorem.txt').st_size

print(size)
print(naturalsize(size))

Der obige Code gibt zunächst die Größe der Datei in Bytes aus und gibt dann das Ergebnis in einer lesbaren Größe aus

Ausgabe

20064
20.1 kB

Pathlib verwenden

Obwohl pathlib ausschließlich für die Arbeit mit Pfaden konzipiert ist, enthält es einige nützliche Funktionen aus anderen Modulen als Methoden von Path-Objekten (Instanzen der Path-Klasse)

Erstellen Sie eine Datei method2.py und importieren Sie die Klasse Path

from pathlib import Path

Erstellen Sie dann ein Path-Objekt und übergeben Sie den Pfad zur Datei lorem.txt als Argument

file_ = Path('lorem.txt')

Nun können Sie auf die stat() -Methode der Path-Klasse zugreifen. Sie funktioniert genauso wie die Funktion os.stat(), daher können Sie die Größe der Datei ausgeben

print(datei_.stat().st_size)

Ausgabe

20064

Wie Sie sehen, erhalten wir das gleiche Ergebnis wie bei der ersten Methode, die wir verwendet haben. Das obige Ergebnis wird ebenfalls im Byte-Format ausgegeben, so dass wir das Modul humanize verwenden können, um es lesbar zu machen

from pathlib import Path
from humanize import naturalsize

size = Path('lorem.txt').stat().st_size

print(naturalsize(size))

Dieser Code erzeugt die folgende Ausgabe
20.

1 kB

Verwendung von Unix-Befehlen mit Subprocess:

Das Subprocess-Modul ermöglicht es uns, Subprozesse von Python aus aufzurufen und zu verwalten. Daher können wir jeden Befehl ausführen und seine Ausgabe direkt in Python verarbeiten

Hinweis: Diese Methode funktioniert nur, wenn Sie mit einem Unix-Betriebssystem (Linux, Mac)

arbeiten
Öffnen Sie die Datei method3.py und fügen Sie den folgenden Code ein

from subprocess import run

process = run(['du', 'lorem.txt'], capture_output=True, text=True)

print(process.stdout)

Tauchen Sie in dieses Stück Code ein

  • Wir importieren die Funktion run aus dem Modul subprocess
  • Die Variable process enthält das Ergebnis der Ausführung des Befehls du lorem.txt
    • du ist ein Linux-Dienstprogramm, mit dem wir den Speicherplatz einer Datei ermitteln können
    • capture_output gibt uns Zugriff auf das Attribut standout (Standardausgabe)
    • text bedeutet, dass wir die Ausgabe als String statt als Bytes speichern
  • Wir geben die Standardausgabe des Prozesses aus

Wenn Sie den obigen Code ausführen, erhalten Sie die folgende Ausgabe

20 lorem.txt

Wie Sie sehen können, erhalten wir die Größe und den Namen der Datei. Wenn Sie nur die Größe der Datei erhalten möchten, müssen Sie die Ausgabe aufteilen (denken Sie daran, dass es sich um einen String handelt) und das erste Element ausgeben

from subprocess import run

process = run(['du', 'lorem.txt'], capture_output=True, text=True)

size = process.stdout.split()<x><x>[0]</x></x>

print(size)

Ausgabe

20

Diese Ausgabe ist überhaupt nicht lesbar. Wir können zwar ableiten, dass die verwendete Maßeinheit KB ist (aufgrund der vorherigen Methoden), aber niemand sonst könnte die Größe der Datei erraten

Um dieses Problem zu lösen, können wir das Flag -h (für Menschen lesbar) verwenden

Hinweis: Eine Anleitung zu diesem Befehl erhalten Sie, indem

Sie

man du oder du –help aufrufen

from subprocess import run

process = run(['du', '-h', 'lorem.txt'], capture_output=True, text=True)

size = process.stdout.split()<x><x>[0]</x></x>

print(size)

Jetzt wird die Ausgabe dieses Skripts viel besser lesbar sein

20K

Wenn Sie mehr über das Modul subprocess und mögliche Anwendungen erfahren möchten, lesen Sie unsere Anleitung zu Python subprocess

Die Größe eines Ordners rekursiv ermitteln

Wenn Sie die Größe eines Ordners ermitteln möchten, müssen Sie jede Datei in diesem Verzeichnis und seinen Unterverzeichnissen durchlaufen. Dazu stehen Ihnen zwei Methoden zur Verfügung

  • Iterieren über einen Pfad mit pathlib
  • Verwendung des Befehls du mit subprocess

Der folgende Code verwendet einen Pfad zu einem Testverzeichnis in meinem Home-Ordner. Sie müssen den Pfad dieser Datei durch das Verzeichnis ersetzen, dessen Größe Sie ermitteln möchten

Iterieren über einen Pfad mit pathlib

Schauen wir uns an, wie Sie die Größe eines Verzeichnisses ermitteln können, indem Sie über die Größen der Dateien iterieren

from pathlib import Path
from humanize import naturalsize

def get_size(path = '.'):
 size = 0

 for file_ in Path(path).rglob('*'):

 size = file_.stat().st_size
    
 return naturalsize(size)

test_path = Path.home() / 'Documents/tests/'

print(get_size(test_path)))

Dieser Code scheint ein wenig unheimlich zu sein, lassen Sie uns die einzelnen Teile aufschlüsseln

  • Importieren Sie die Klasse Path und die Funktion naturalsize()
  • Definieren Sie die Funktion get_size() mit einem Parameter path, der standardmäßig auf das aktuelle Verzeichnis zeigt.
  • Die Variable size ist nur ein Platzhalter, in den wir die Größe der einzelnen Dateien eintragen werden
  • Iterieren Sie über jede Datei des Pfades
    • Die Methode rglob() gibt rekursiv die Dateien zurück, die dem Muster entsprechen
    • rglob(‘*’), bedeutet, dass wir alle Dateien innerhalb des Verzeichnisses erhalten
  • Ermitteln Sie die Größe jeder Datei und fügen Sie sie der Variablen size hinzu
  • Gibt die Größenvariable in einer für Menschen lesbaren Form zurück

Natürlich teste ich die Funktion mit einem Verzeichnis, das nur auf meinem Rechner verfügbar ist. Vergessen Sie nicht, den Pfad in einen Ordner zu ändern, der auf Ihrem Computer existiert

In meinem Fall erhalte ich die folgende Ausgabe
403.

4 MB

Verwenden des du-Befehls mit Subprocess

Dieser Ansatz hat einige Vorteile

  • Das Ergebnis ist ein wenig genauer
  • Es ist viel schneller
from subprocess import run
from pathlib import Path

test_path = Path.home() / 'Dokumente/Tests/'

process = run(['du', '-sh', test_path], capture_output=True, text=True)

size = process.stdout.split()<x><x>[0]</x></x>

print(size)

Wir verwenden den gleichen Ansatz wie bei Methode 3, aber dieses Mal ermitteln wir die Größe eines Verzeichnisses statt einer Datei

Ausgabe

481M

Wie Sie sehen können, liefern diese beiden Methoden zur Ermittlung der Größe eines Ordners ein leicht unterschiedliches Ergebnis. Je größer das Verzeichnis ist, desto größer ist der Unterschied, den Sie erhalten

Es liegt an Ihnen, ob Sie sich für die pathlib oder die subprocess Methode entscheiden. Wenn Sie wissen, dass Sie immer mit Linux arbeiten werden, verwenden Sie subprocess, ansonsten können Sie die pathlib-Lösung verwenden

Zusammengefasst

Python erweist sich bei der Interaktion mit dem Betriebssystem als äußerst praktisch. Mit Python können Sie Prozesse automatisieren und eine Menge Zeit sparen. Die wichtigsten Module für die Interaktion mit dem Betriebssystem sind os, sys, path und subprocess

In diesem Lernprogramm haben Sie gelernt

  • Wie Python mit dem Betriebssystem interagiert
  • Die Verwendung von eingebauten Modulen zur Durchführung von OS-Operationen
  • Wie Sie das Modul humanize verwenden, um menschenlesbar zu drucken
  • Wie man die Größe einer Datei mit 3 Ansätzen berechnet
  • Wie Sie die Größe eines Verzeichnisses rekursiv oder mit dem Befehl du berechnen können
  • Daniel Diaz
    Autor
Dank an unsere Sponsoren
Weitere gute Lektüre zum Thema Entwicklung
Energie für Ihr Unternehmen
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti nutzt das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu überprüfen und innerhalb weniger Stunden verwertbare Ergebnisse zu erzielen.
    Versuchen Sie Invicti
  • Web Scraping, Residential Proxy, Proxy Manager, Web Unlocker, Search Engine Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie Brightdata
  • Monday.com ist ein All-in-One-Betriebssystem, mit dem Sie Projekte, Aufgaben, Arbeit, Vertrieb, CRM, Arbeitsabläufe und vieles mehr verwalten können.
    Versuch Montag
  • Intruder ist ein Online-Schwachstellen-Scanner, der Schwachstellen in Ihrer Infrastruktur aufspürt, um kostspielige Datenschutzverletzungen zu vermeiden.
    Versuchen Sie Intruder