Datei input/output als gzip, oder plain text ermöglichen.
Verfasst: Donnerstag 9. Januar 2020, 10:03
Hallo Leute,
ein Skript soll eine textbasierte Datei öffnen, mit dem Inhalt eine ganze Menge herumarbeiten und dann die Ergebnisse in einer anderen ebenfalls textbasierten Datei abspeichern. Ich möchte, dass das Skript optional auch mit, mit gzip komprimierte Dateien, arbeiten kann. Wie kann ich meinen Code am besten anpassen, damit das klappt? Folgendes habe ich mir ausgedacht:
Also my_open_function() entweder als gzip.open() definieren oder also normales open() je nachdem ob gzip oder normale Textdatei verwendet werden soll. Ich verwende für das Lesen der Datei einen parser und für das schreiben der Datei ganz einfach die .write() Funktion. Bisher funktioniert das so. Kann man das so machen oder führt das zu Problemen?
Alternativ könnte man halt das ganze Skript mit if/else Abzweigungen immer aufteilen in einen Pfad für gzip und einen für txt. Oder wenn gzip gewünscht ist erstmal den Inhalt in eine temporäre Datei entpacken und dann mit dieser Datei arbeiten und beim output andersherum erst in eine ungepackte temporäre Datei schreiben und dann am Ende die Datei komprimieren.
Würde mich freuen wenn mir jemand kurz sagen könnte wie man sowas am elegantesten löst. Vielen Dank.
ein Skript soll eine textbasierte Datei öffnen, mit dem Inhalt eine ganze Menge herumarbeiten und dann die Ergebnisse in einer anderen ebenfalls textbasierten Datei abspeichern. Ich möchte, dass das Skript optional auch mit, mit gzip komprimierte Dateien, arbeiten kann. Wie kann ich meinen Code am besten anpassen, damit das klappt? Folgendes habe ich mir ausgedacht:
Code: Alles auswählen
import gzip
files_as_gzip = True
file_path_input = '/home/user/input.txt.gz'
file_path_output = '/home/user/output.txt'
file_path_output += '.gz' if files_as_gzip else ''
my_open_function = gzip.open if files_as_gzip else open
my_open_options_input = 'rt' if files_as_gzip else 'r'
my_open_options_output = 'wt' if files_as_gzip else 'w'
input = []
with my_open_function(file_path_input,my_open_options_input) as file:
for line in file:
input.append(line)
with my_open_function(file_path_output,my_open_options_output) as file:
for line in input:
file.write(line)
Alternativ könnte man halt das ganze Skript mit if/else Abzweigungen immer aufteilen in einen Pfad für gzip und einen für txt. Oder wenn gzip gewünscht ist erstmal den Inhalt in eine temporäre Datei entpacken und dann mit dieser Datei arbeiten und beim output andersherum erst in eine ungepackte temporäre Datei schreiben und dann am Ende die Datei komprimieren.
Würde mich freuen wenn mir jemand kurz sagen könnte wie man sowas am elegantesten löst. Vielen Dank.