2017-02-03 12 views
-1

Ich versuche zu überprüfen, ob einige Dateien existieren. Wenn sie existieren, möchte ich überprüfen, ob sie korrekt sind. Um dies zu tun, habe ich eine Funktion gemacht, aber es funktioniert nicht. Das habe ich versucht. Irgendeine Hilfe?Eine Funktion zum Überprüfen, ob es eine Datei gibt und ob sie korrekt ist

def check_file(namefile): 
    if not os.path.isfile(namefile): 
     return False 
else: 
    extension=namefile.split(".")[-1] 
    if extension=="txt": 
     #in this case correct means it finds "END" in the file 
     if "END" in open("*.txt").read(): 
      print "file %s already exists"%(namefile) 
+1

Was meinen Sie mit "es funktioniert nicht"? und ist das Ihre tatsächliche Einrückung in Ihrem Code? – Lafexlos

+1

'wenn" ENDE "in open (Namefile) .read():' (das ist nicht eine gute Idee für große Dateien, da Sie sie alle im Speicher sind) –

+0

Was ist 'open (" *. Txt ") 'soll das machen? Meintest du "open (nameFile)"? –

Antwort

0

Ich schlage vor, die entsprechenden os.path Funktionen zu nutzen und Ihre Logik neu zu organisieren:

from os.path import exists, splitext 

def check_file(namefile): 
    if exists(namefile) and splitext(namefile)[-1] == "txt": 
     with open(namefile) as fobj: 
      for line in fobj: 
       if "END" in line: 
        return True 
    return False 

os.path.splitext spaltet die Verlängerung ab und os.path.exists prüft, ob eine Datei vorhanden ist. Es empfiehlt sich, eine Datei mit zum automatischen Schließen zu öffnen. Es ist auch effizienter für größere Dateien, zeilenweise mit for line in fobj: lesen und Rückkehr True zurückgeben, sobald Sie END finden. Dies vermeidet das Lesen aller folgenden Zeilen, wenn Sie bereits END gefunden haben.

+0

Ich denke, dass dieser Weg schwieriger ist, aber ich versuche zu lernen. Gibt es einen Grund für diese logische Neuorganisation? – santimirandarp

+0

Sie müssen Negative, wenn nicht existiert ... zurückgeben False. Ich habe die zwei positiven Bedingungen (1) es existiert und (2) es endet mit "txt" zusammen. Ich finde Positive besser zu verstehen als Negative. –

+0

Großartig, ich hatte die Erklärung über "Splitext", "mit offenem" usw. nicht gesehen. Es war wirklich nützlich. Danke Mike. – santimirandarp

0

Hier ist eine korrigierte Version des Codes. Es wird die Datei öffnen und prüfen, ob "END" in der Datei ist.

import os 

def check_file(namefile): 
    if not os.path.isfile(namefile): 
     return False 
    else: 
     extension = namefile.split(".")[-1] 
     if extension == "txt": 
      if "END" in open(namefile).read(): 
       print ("file %s already exists"%(namefile)) 
+0

Vielleicht wollen 'open (namefile) .read()' auch aus dem Lesen der gesamten Datei im Speicher –

+0

Großartig, danke .. – santimirandarp

Verwandte Themen