Seite 1 von 1
.gz Dateigröße ermitteln
Verfasst: Montag 25. Februar 2019, 12:16
von nik255
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
Re: .gz Dateigröße ermitteln
Verfasst: Montag 25. Februar 2019, 12:57
von __deets__
Interessiert dich die entpackte Groesse, oder nur die Groesse der gz-Datei?
Re: .gz Dateigröße ermitteln
Verfasst: Montag 25. Februar 2019, 13:11
von nik255
Nur die gepackte
Re: .gz Dateigröße ermitteln
Verfasst: Montag 25. Februar 2019, 13:17
von __blackjack__
@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.
Re: .gz Dateigröße ermitteln
Verfasst: Montag 25. Februar 2019, 13:48
von nik255
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?
Re: .gz Dateigröße ermitteln
Verfasst: Montag 25. Februar 2019, 13:53
von sparrow
Was sagt denn die
Dokumentation der Funktion?
Und zeig doch mal, wie du es versuchst und den kompletten Fehler inklusive Stacktrace.
Re: .gz Dateigröße ermitteln
Verfasst: Montag 25. Februar 2019, 14:06
von __blackjack__
@nik255: Was meinst Du mit die Grösse der gesamten Dateien? `os.path.getsize()` erwartet den Pfad/Namen *einer* Datei.
Re: .gz Dateigröße ermitteln
Verfasst: Montag 25. Februar 2019, 14:38
von nik255
Okay, ich habe getsize() falsch angewendet. Jetzt benuzte ich folgenden Code:
Code: Alles auswählen
size = sum([os.path.getsize(f) for f in os.listdir('D:\Codes') if os.path.isfile(f)])
Welcher indem Fall auch funktioniert. Wenn ich jedoch den Dateipfad änder, wo alle meine gepackten Dateien drinne sind kommt folgende Meldung:

Re: .gz Dateigröße ermitteln
Verfasst: Montag 25. Februar 2019, 14:42
von sparrow
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.
Re: .gz Dateigröße ermitteln
Verfasst: Montag 25. Februar 2019, 15:00
von nik255
Nochmal für den besseren Überblick:
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.
Re: .gz Dateigröße ermitteln
Verfasst: Montag 25. Februar 2019, 15:24
von sparrow
Was ist deine konkrete Frage?
Warum der Fehler auftritt und es auch ohne den Fehler nicht funktioniert, habe ich ja beantwortet.
Re: .gz Dateigröße ermitteln
Verfasst: Montag 25. Februar 2019, 16:21
von Sirius3
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'))