2016-05-08 8 views
0

Ich habe ein Skript geschrieben, das eine Webseite analysiert und Daten von Interesse in einer CSV-Datei speichert. Bevor ich die Daten öffne und sie in einem zweiten Skript verwende, überprüfe ich, ob die Datei mit Daten existiert und wenn nicht, führe ich zuerst das Parser-Skript aus. Das seltsame Verhalten des zweiten Skripts ist, dass es erkennen kann, dass es keine Datei gibt, dann wird die Datei erstellt, aber wenn es zum ersten Mal gelesen wird, ist es leer (Teil der else-Anweisung). Ich habe versucht, etwas Verzögerung mit der Methode time.sleep() zu schaffen, aber es funktioniert nicht. Der Explorer zeigt deutlich, dass die Datei nicht leer ist, aber beim ersten Durchlauf erkennt das Skript die Datei als leer. Bei den folgenden Läufen sieht das Skript die Datei klar und kann sie korrekt erkennen.Datei nach positiver Ausnahme erstellen FileNotFoundError

Vielleicht haben Sie eine Erklärung für dieses Verhalten.

def open_file(): 
    # TARGET_DIR and URL are global variables. 
    all_lines = [] 

    try: 
     current_file = codecs.open(TARGET_DIR, 'r', 'utf-8') 

    except FileNotFoundError: 
     procesed_data = parse_site(URL) 
     save_parsed(procesed_data) 
     compare_parsed() 
     open_file() 

    else: 
     time.sleep(10) 
     data = csv.reader(current_file, delimiter=';') 

     for row in data: 
      all_lines.append(row) 
     current_file.close() 

     return all_lines 

Antwort

1

Sie haben einige Rekursion geht.

Ein anderer Weg, es zu tun — vorausgesetzt, verstehe ich richtig — dies:

import os 

def open_file(): 
    # TARGET_DIR and URL are global variables. 
    all_lines = [] 

    # If the file is not there, make it. 
    if not os.path.isfile(TARGET_DIR): 
     procesed_data = parse_site(URL) 
     save_parsed(procesed_data) 
     compare_parsed() 
     # Here I am assuming the file has been created. 

    current_file = codecs.open(TARGET_DIR, 'r', 'utf-8') 
    data = csv.reader(current_file, delimiter=';') 
    for row in data: 
     all_lines.append(row) 
    current_file.close() 
    return all_lines 
+0

Danke, wenn ich es in der oben gezeigten Weise mache, funktioniert es. Es scheint, dass die Exception die Rekursion nicht verarbeiten kann. Die Frage ist warum, aber ich habe kein Python-Wissen benötigt, um das zu beantworten. – frankot

0

sollten Sie das Ergebnis Ihrer internen open_file Anruf zurückzukehren, oder öffnen Sie einfach die Datei in Ihrem außer Block:

def open_file(): 
    # TARGET_DIR and URL are hopefully constants 
    try: 
     current_file = codecs.open(TARGET_DIR, 'r', 'utf-8') 
    except FileNotFoundError: 
     procesed_data = parse_site(URL) 
     save_parsed(procesed_data) 
     compare_parsed() 
     current_file = codecs.open(TARGET_DIR, 'r', 'utf-8') 

    data = csv.reader(current_file, delimiter=';') 
    all_lines = list(data) 
    current_file.close() 
    return all_lines 
+0

Und hoffentlich kein dir, – totoro

+0

Ok, die Lösung nicht funktionieren. Die Hauptsache ist, warum der Aufruf von open_file() nicht korrekt funktioniert, wenn er im ausnahmeblock verwendet wird. – frankot

+0

@ totoro; Der Name der Variablen TARGET_DIR ist irgendwie irreführend. Es ist der Pfad zu der Datei. – frankot

Verwandte Themen