Guten Tag,
ist es möglich, mehere .gz Dateien einzulesen, die Größe zu Filtern und die Anzahl der gefilterten Daten in eine .txt zu speichern?
Kleines Beispiel wie ich es meine: Ich habe 50 Dateien, alle unterschiedlich groß. Ich möchte jedoch nur die die größer sind als 200kB. Die Dateien die über 200kB groß sind, sollen in einer Text Datei abgespeichert werden.
Hat jemand eventuell ein Lösungsansatz, bin neu bei Python und bin derzeit mit meinem Latein am Ende.
Mit freundlichen Grüßen
.gz Dateigröße ermitteln
- __blackjack__
- User
- Beiträge: 14040
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@nik255: Unabhängig wie Du __deets__' Frage beantwortest ist in Python beides möglich. Und eigentlich auch relativ einfach. Wo liegt denn das konkrete Problem? Für die Dateigrösse brauchst Du die Datei nicht einlesen/entpacken, da kann man ja einfach die Metadaten vom Dateisystem erfragen (`os.path`-Modul oder `pathlib`). Ansonsten müsste man die Dateien mit Hilfe des `gzip`-Moduls öffnen und kann dann beispielsweise mit `seek()` ermitteln wie lang die entpackte Datei ist.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Ich habe es mit os.path.getsize(..) versucht, jedoch kommt es da immer zur Fehlermeldung. "Datenträgerbezeichnung ist falsch..".
Wenn ich aber z.B. os.path.exists(..) benutze, funktioniert es alles einwandfrei. Wahrscheinlich übersehe ich gerade einfach irgendwas dummes.
Wie dem auch sei, angenommen getsize() würde funktionieren, wird da nicht die Größe der gesamten Dateien wiedergegeben? Oder kann man auch jede einzelne Datei wiedergeben?
Wenn ich aber z.B. os.path.exists(..) benutze, funktioniert es alles einwandfrei. Wahrscheinlich übersehe ich gerade einfach irgendwas dummes.
Wie dem auch sei, angenommen getsize() würde funktionieren, wird da nicht die Größe der gesamten Dateien wiedergegeben? Oder kann man auch jede einzelne Datei wiedergeben?
Was sagt denn die Dokumentation der Funktion?
Und zeig doch mal, wie du es versuchst und den kompletten Fehler inklusive Stacktrace.
Und zeig doch mal, wie du es versuchst und den kompletten Fehler inklusive Stacktrace.
- __blackjack__
- User
- Beiträge: 14040
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@nik255: Was meinst Du mit die Grösse der gesamten Dateien? `os.path.getsize()` erwartet den Pfad/Namen *einer* Datei.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Okay, ich habe getsize() falsch angewendet. Jetzt benuzte ich folgenden Code:
Welcher indem Fall auch funktioniert. Wenn ich jedoch den Dateipfad änder, wo alle meine gepackten Dateien drinne sind kommt folgende Meldung:

Code: Alles auswählen
size = sum([os.path.getsize(f) for f in os.listdir('D:\Codes') if os.path.isfile(f)])

Das Ergebnis von os.listdir ist eine Liste mit Dateinamen. os.path.getsize() erwartet aber einen kompletten Pfad + Dateinamen.
Mit os.path.join kannst du Pfade zusammen setzen.
Du musst einen Backslash in einer Zeichenkette mit einem Backslash escapen ( d:\\xxx ) oder du benutzt stattdessen ein "/", den muss man nicht escapen und Python versteht beides.
Übrigens passt dein gezeigter Stacktrace nicht zu deinem Code. Denn der Fehler würde so bei dem Code, den du zeigst, nicht auftreten, weil du dort zufällig kein Excape-Zeichen triffst. Der Fehler wäre also versteckt, bis du einen Verzeichnisnamen erwischt, in dem ein Escapezeichen vorkommt.
Mit os.path.join kannst du Pfade zusammen setzen.
Du musst einen Backslash in einer Zeichenkette mit einem Backslash escapen ( d:\\xxx ) oder du benutzt stattdessen ein "/", den muss man nicht escapen und Python versteht beides.
Übrigens passt dein gezeigter Stacktrace nicht zu deinem Code. Denn der Fehler würde so bei dem Code, den du zeigst, nicht auftreten, weil du dort zufällig kein Excape-Zeichen triffst. Der Fehler wäre also versteckt, bis du einen Verzeichnisnamen erwischt, in dem ein Escapezeichen vorkommt.
Nochmal für den besseren Überblick:
Szenario1:

Szenario2:

Im Grunde genommen ändert sich nur der Pfad.
Szenario1:
Code: Alles auswählen
size = sum([os.path.getsize(f) for f in os.listdir('D:\Codes') if os.path.isfile(f)])
print (size)

Szenario2:
Code: Alles auswählen
size = sum([os.path.getsize(f) for f in os.listdir('D:\sandbox\vault\43') if os.path.isfile(f)])
print (size)

Im Grunde genommen ändert sich nur der Pfad.
Würde man, wie oben schon angesprochen, `pathlib` verwenden, würden solche Probleme erst gar nicht auftreten.
Code: Alles auswählen
size = sum(p.stat().st_size for p in pathlib.Path('...').glob('*.gz'))