0

我有一个由三列组成的 csv 文件。

我的目标是添加第四列,并使用基于我的列 n°2 和 n°3 的语句填充它。

这是我的代码的开头:

import csv, sys, locale, operator

abord = "/home/julien/csv/ABORD.csv"
file1 = open (abord, 'rb')
reader1 = csv.reader (file1, delimiter = ';', quotechar=' ')

next(reader1) 
for row1 in reader1:
    ID = row1 [0]
    LARG_1 = row1 [1]
    LARG_2 = row1 [2]

我想做这样的事情:

if LARG_1 > 10 and LARG_2 <20:
    print "result OK" in a fourth column "CONTROL"
else:
    print "result fail" in the fourth column "CONTROL"

then save the csv, nom composed of 4 columns

你知道我该怎么做吗?谢谢 !

4

1 回答 1

1

您必须写入另一个文件(使用 a csv.Writer

sourcepath = "/home/julien/csv/ABORD.csv"
destpath =  "/home/julien/csv/ABORD-fixed.csv"

with open(sourcepath, "rb") as source, open(destpath, "wb") as dest:
    # XXX are you sure you want this as quotechar ???
    reader = csv.reader(source, delimiter = ';', quotechar=' ')
    writer = csv.writer(dest,  delimiter = ';', quotechar=' ')

    # first copy the (augmented) headers
    headers = reader.next()
    headers.append("CONTROL")
    writer.writerow(headers)

    # then let's loop on the content
    for rownum, row in enumerate(reader):
        # we need to convert data to int             
        # adding proper error handling here might help...
        # status = "result OK" if (int(row[1]) > 10 and int(row[2]) < 20) else "result fail"
        try:
            l1 = int(row[1])
            l2 = int(row[2])
        except (TypeError, ValueError), e:
            err = "non integer value for l1 and or l2 in row %s line %s - got : %s" % (
                rownum, reader.linenum, row
                )
            print >> sys.stderr, err
            result = "invalid values"
        else:
            if l1 > 10 and l2 < 20:
                result = "result OK"
            elif rownum == 42: # stupid value for if/elif/else exemple
                result = "what's the question ?"
            else:
                result = "result fail"

        row.append(result)
        writer.writerow(row)

如果需要,您可以删除源文件并重命名新文件。

于 2013-05-06T10:58:04.650 回答