2017-09-22 2 views
0

Gunzip Ich habe einen Code geschrieben, um alle Dateien im Quellordner zu gunzip. Aber ich möchte die Überprüfung, dass, wenn gunzipped Datei nicht existiert dann gunzip es sonst in die nächste Datei verschieben.Gunzip alle Dateien im Quellverzeichnis in Python

source_dir = "/Users/path" 
dest_dir = "/Users/path/Documents/path" 


for src_name in glob.glob(os.path.join(source_dir, '*.gz')): 

    base = os.path.basename(src_name) 
    dest_name = os.path.join(dest_dir, base[:-3]) 
    with: gzip.open(src_name, 'rb') as infile, open(dest_name, 'wb') as outfile: 
      try: 
       for line in infile: 
        print ("outfile: %s" %outfile) 
        if not os.path.exists(dest_name): 
         outfile.write(line) 
         print("converted: %s" %dest_name) 

      except EOFError: 
       print("End of file error occurred.") 

      except Exception: 
       print("Some error occurred.") 

habe ich os.path.exist zu überprüfen, ob die Datei vorhanden ist oder nicht, aber es scheint, wie os.path.exist hier nicht verwendet funktioniert.

+0

Für Problem 2 verwenden Sie die geplanten Job-Dienstprogramme Ihres Betriebssystems. Keine Notwendigkeit zu versuchen, Ihre eigenen zu programmieren. – glibdud

+0

Es gibt keine Frage in Teil 1. Teil 2 ist viel zu breit für Stack Overflow. –

+0

@MadPhysicist, ich möchte eine Überprüfung hinzufügen, wenn gunzipped Datei nicht existiert, dann nur gunzip es andere weise verschieben, um nächste Datei. Wie überprüfe ich das? – rnvs1116

Antwort

1

Ich denke, Sie haben den path.exists Anruf verlegt. Es sollte sein:

source_dir = "/Users/path" 
dest_dir = "/Users/path/Documents/path" 


for src_name in glob.glob(os.path.join(source_dir, '*.gz')): 

    base = os.path.basename(src_name) 
    dest_name = os.path.join(dest_dir, base[:-3]) 

    if not os.path.exists(dest_name): 
     with gzip.open(src_name, 'rb') as infile, open(dest_name, 'wb') as outfile: 
      try: 
       for line in infile: 
        print("outfile: %s" % outfile) 
        outfile.write(line) 
        print("converted: %s" % dest_name) 

      except EOFError: 
       print("End of file error occurred.") 

      except Exception: 
       print("Some error occurred.") 

Auch als @MadPhysicist betonte: „nach Öffnen der Kontrolle zu tun (...,‚wb‘) (wie Sie in Ihrem ursprünglichen Code getan haben), wird immer sagen, dass die Datei vorhanden ist weil das ist was geöffnet (..., 'w') tut "

Obendrein, auch wenn Sie eine andere Überprüfung für die Notwendigkeit des Gunzipping gemacht haben, tun Sie es, wo Sie es gesetzt haben, wird die Überprüfung auf Jede Zeile, die als Ergebnis komplett redundant ist, ist für alle Zeilen gleich (exists/not-exists).

+0

OP-Code ist viel eleganter als deins. –

+0

Ich habe den vorhandenen Code nicht viel geändert, habe nur ein Beispiel gegeben, wie man Setup die Liste der Dateien verwendet, die er benötigt. Ich habe nur 5 Zeilen vor dem for_loop hinzugefügt. Was ursprünglich nicht das war, was er wollte. – ronenmiller

+0

@MadPhysicist Die Frage von OP wurde zunächst nicht geändert. behebt meine Antwort, falsch platziert wenn Aussage. Bitte überprüfen Sie erneut und geben Sie Ihre Gedanken ab. – ronenmiller