Игнорирование некоторых строк (в цикле for), если они выдают ошибку наверняка - PullRequest
0 голосов
/ 20 октября 2019

Чтобы подвести итог моей проблемы, я использую цикл for для чтения и обработки текстового файла csv. Я хотел бы создать новый столбец, и этот столбец должен быть результатом другого поля, разделенного другим полем в том же входном файле. Дело в том, что когда этот процесс выдает ошибку (из-за того, что: x / 0 математически невозможен или строка / строка не может быть разделена), строки, дающие ошибку, полностью удаляются из выходного файла. Я планировал использовать try, за исключением функций finally, чтобы обработать эту ошибку и оставить строки (выдающие ошибку) без изменений.

здесь ввод:

here is my code: 
##  Author – Caner Ferhatoglu - canerf@iastate.edu
##  10.19.2092
##  Python 2.7.16
##  Purpose was Assignment 4 that Dr. Gelder forced us to do. It was not all bad though
##  as I learned a bit how to manipulate csv files.
##  Putting the info above got me [10 pt :)] and putting comments where necessary got me another [10 pt :)]

## Import goods
import os, sys
import numpy as np

### Input and output files paths

input_file = r'C:\Users\17067\Box\Courses\CRP 456\Assignment_4\Select50.txt'
output_file = r'C:\Users\17067\Box\Courses\CRP 456\Assignment_4\updated_parcel.txt'

## open input and output files and create as objects
ifo = open(input_file, 'r')
ofo = open(output_file, 'w')

## First I need to convert each line of string to a list of items
for each_line in ifo:
    ## Read each line [10 pt :)]
    sys.stdout.write(each_line)
    ## parse input string into a list delimited by commas
    data = each_line.split(",")
    ### 3 del functions below removes ALL the data after the LegalDesc column and empty columns (HouseNbrEx and DirSuf) -> [20 pt :)]
    del data[37:]
    del data[5]
    del data[11]
    ### Capitalize each word in full address column [10 pt :)]
    data[3] = data[3].title() 
    data[35] = data.insert(35, 0)
    ### Create a column called "LVPerSqFt"
    data[35] = "LVPerSqFt"  ### Create a column called "LVPerSqFt"
    ### Use try, except, and finally to eliminate process where it gives errors (10 points)
    try:
        ## This column gets the value of the value listed in the “LandValue” column divided by the value listed in the “LotSqFt” column for each row. [10 pt]
        data[35] = float(data[25])/float(data[22])
        ofo.write(str(data) + '\r\n')
    except:
        pass
    finally:
        print("Califragilisticexpialidocious")
ifo.close()
ofo.close()

проблемные строки удалены с выхода

...