2017-12-30 33 views
0

Ich habe eine Datei, die Blöcke von 11 Zeilen jedes Elements enthält. Ich möchte jeden Block durchlaufen und die Daten jeder Zeile im Block extrahieren. Ich habe es so gemacht:Unerwartetes Verhalten beim Durchlaufen des Zeilenblocks

Sie können den Druck (TempLine) ich implementiert sehen, um zu überprüfen, ob meine Version funktioniert. Aber nach der ersten Iteration iteriert jede WHILE-Schleife nur durch eine Zeile!

Kann jemand dieses Verhalten für mich erklären?

+0

Err ... könnten Sie ein Beispiel für Ihre Eingabedatei angeben? Es sieht so aus, als ob du eine Menge Arbeit machst, die du nicht haben musst ... –

+0

@cdarke kannst du es mit mehr als einer Eingabe versuchen? Ich kann meine Eingabe hier nicht aus Gründen der Vertraulichkeit posten. –

+0

Mein schlechtes. Beachten Sie, dass es 12 Aufrufe von 'next()' bei jeder Iteration gibt und dass Sie nicht die Zeile erfassen, die vom letzten im 'try' Block gelesen wurde. – cdarke

Antwort

2

Das Problem ist, dass Ihre letzte next() im try Block die erste Zeile des nächsten Block liest, aber es nicht erfassen, so daß die Leitung verloren geht. Jede Iteration liest 12 Datensätze, nicht 11, sondern nur 11

versuchen, diesen Prozess (es gibt zwei neue Linien und eine geänderte Zeile):

import re 

file_removed = open("input_removed.txt") 
json_result = open("output_json.json", "w+") 
datalist = [] 
name = None         # Added 

while True: 

    data = {} 

    if name is None:       # Added 
     name = next(file_removed) 

    name = re.sub("\n", "", name) 

    data["name"] = name 
    familyName = next(file_removed) 
    familyName = re.sub("\n", "", familyName) 

    data["familyName"] = familyName 


    wGuideline = next(file_removed) 
    wGuideline = re.sub("Watering guidelines\s+","", wGuideline) 
    wGuideline = re.sub("\n", "", wGuideline) 
    data["water"] = wGuideline 

    FerLine = next(file_removed) 
    FerLine = re.sub("Fertilizer suggestions\s+ ","",FerLine) 
    FerLine = re.sub("\n", "", FerLine) 
    data["fertilizer"] = FerLine 

    MistLine = next(file_removed) 
    MistLine = re.sub("Mist requirements\s+","",MistLine) 
    MistLine = re.sub("\n", "", MistLine) 
    data["mist"] = MistLine 

    LightLine = next(file_removed) 
    LightLine = re.sub("Light preferences\s+","", LightLine) 
    LightLine = re.sub("\n", "", LightLine) 
    data["light"] = LightLine 

    TempLine = next(file_removed) 
    TempLine = re.sub("Temperature preference\s+","",TempLine) 
    TempLine = re.sub("\n", "", TempLine) 
    data["temperature"] = TempLine 

    print(TempLine) 
    phLine = next(file_removed) 
    phLine = re.sub("pH range\s+", "", phLine) 
    phLine = re.sub("\n", "", phLine) 
    data["ph"] = phLine 

    AcidLine = next(file_removed) 
    AcidLine = re.sub("Acidity preference\s+", "",TempLine) 
    AcidLine = re.sub("\n", "", TempLine) 
    data["acid"] = AcidLine 

    ToxicLine = next(file_removed) 
    ToxicLine = re.sub("Toxicity\s+", "",AcidLine) 
    ToxicLine = re.sub("\n", "", AcidLine) 
    data["toxic"] = ToxicLine 

    ClimateLine = next(file_removed) 
    ClimateLine = re.sub("Climate\s+", "",ClimateLine) 
    ClimateLine = re.sub("\n", "", ClimateLine) 
    data["climate"]= ClimateLine 

    datalist.append(data) 
    try: 
     name = next(file_removed)   # Changed 
    except StopIteration: 
     break; 

Es gibt noch weitere Verbesserungen, die dazu gemacht werden könnten Code, aber weitere Änderungen würden das unmittelbare Problem beeinträchtigen.

+0

Danke, das erklärt viel! –

Verwandte Themen