2017-12-30 8 views
0

각 항목의 11 줄 블록을 포함하는 파일이 있습니다. 각 블록을 반복하고 블록의 각 행의 데이터를 추출하려고합니다. 나는 이것을 이렇게했다 :회선 블록을 반복하면서 예기치 않은 동작이 발생했습니다.

file_removed = open("input_removed.txt") 
json_result = open("output_json.json", "w+") 
datalist = [] 
while True: 

    data = {} 

    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: 
     next(file_removed) 
    except StopIteration: 
     break; 

내 버전이 작동하는지 확인하기 위해 구현 한 인쇄물 (TempLine)을 볼 수있다. 그러나 FIRST 반복 후에 각 WHILE 루프는 한 줄만 반복합니다!

나를 위해이 문제를 설명 할 수 있습니까?

+0

오류 ... 입력 파일의 예를 제공해 주시겠습니까? 당신이 거기에서 많은 일을하고있는 것처럼 보입니다. ... –

+0

@cdarke 하나 이상의 입력을 시도 할 수 있습니까? 기밀 이유로이 곳에 입력 할 수 없습니다. –

+0

제 잘못입니다. 각 반복마다'next()'에 12 번의 호출이 있으며,'try' 블록에서 마지막으로 읽어 들인 라인을 포착하지는 않습니다. – cdarke

답변

2

문제는 try 블록의 마지막 next()다음 블록의 첫 번째 라인을 읽지 만 그 선이 끊어 때문에, 그것을 포착하지 않습니다. 각 반복은 12 개 기록하지 (11)를 읽고,하지만 당신은 단지 11

을 시도해보십시오 처리이 (두 개의 새로운 라인과 하나 개 변경된 라인이 있습니다) :

이 만들어 질 수있는 다른 개선 사항이 있습니다
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; 

코드를 추가로 변경하면 즉각적인 문제가 발생하지 않습니다.

+0

감사합니다. 많이 설명했습니다! –

관련 문제