2016-04-03 16 views
1

Ich schreibe ein Programm, das mehrere Dateien gleichzeitig akzeptiert. Aber ich versuche, dieses Programm so zu ändern, dass wenn eine leere Datei eingegeben wird, diese Datei ignoriert wird, aber alle anderen Dateien weiter gelesen werden, und mir eine Ausgabe zur Verfügung gestellt wird, ohne irgendwelche Ausnahmefehler bezüglich der leeren Datei auszulösen.Wie kann man mehrere Dateien durchlaufen, leere Dateien ignorieren, ohne eine Ausnahme auszulösen?

Zum Beispiel:

Datei 1 = Text enthält, der mit diesem Programm

Datei 2 arbeitet = leer

Dies ist ein Stück meines Programms:

from sys import argv 
script , filenames = argv[0], argv[1:] 

for file in filenames: 
    with open(file) as f: 

     var = f.read()   

     print "\n\nYou File Name: '(%r)'" % (file) 

     var1 = var.split() 
     var2 = len(var1) 

     print '\n\nThe Total Number of Words: "({0:,})"'.format(var2) 

     var3 = var.split()[0] 
     var4 = len(var3) 

     print '\n\nThe First Word and Length: "(%s)" ({0:,})'.format(var4) % (var3) 

Wenn ich dieses Programm unter Verwendung von Datei 2 ausführe, erhalte ich den folgenden Fehler:

var3 = var.split()[0] 
IndexError: list index out of range 

Gibt es eine Möglichkeit, die Datei 1 und Datei 2 zusammen auszuführen, aber die Ausgabe für Datei 1 erhalten, dann eine Nachricht für Datei 2 drucken, die besagt, dass es sich um eine nicht erkennbare Datei handelt? Ich habe versucht, try/except hinzuzufügen, aber es funktionierte immer noch nicht richtig.

Antwort

1

Verwenden if/else die Länge der Datei zu überprüfen:

for file in filenames: 
    with open(file) as f: 

     var = f.read()   

     print "\n\nYou File Name: '(%r)'" % (file) 

     if len(var) > 0: 
      var1 = var.split() 
      var2 = len(var1) 

      print '\n\nThe Total Number of Words: "({0:,})"'.format(var2) 

      var3 = var.split()[0] 
      var4 = len(var3) 

      print '\n\nThe First Word and Length: "(%s)" ({0:,})'.format(var4) % (var3) 
     else: 
      print 'File empty' 
+0

Thank you! Ich denke, ich überholte diesen hier :). Wenn/sonst funktioniert. – brazjul