Python:使用if/else语句填充新列

Python:使用if/else语句填充新列,python,Python,我有一个由三列组成的csv文件 我的目标是添加第四列,并使用基于第2列和第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 read

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

我的目标是添加第四列,并使用基于第2列和第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

如果LARG_1>10和LARG_2您必须写入另一个文件(使用
csv.Writer

sourcepath=“/home/julien/csv/ABORD.csv”
destpath=“/home/julien/csv/ABORD fixed.csv”
以open(sourcepath,“rb”)作为源,open(destpath,“wb”)作为dest:
#XXX您确定要将此作为报价单吗???
reader=csv.reader(源,分隔符=';',引号=“”)
writer=csv.writer(dest,分隔符=“;”,引号=“”)
#首先复制(扩展的)标题
headers=reader.next()
headers.append(“控件”)
writer.writerow(标题)
#然后让我们循环内容
对于rownum,枚举(读取器)中的行:
#我们需要将数据转换为int
#在此处添加正确的错误处理可能会有所帮助。。。
#status=“result OK”如果(int(第[1]行)大于10且int(第[2]行)小于20)否则“result fail”
尝试:
l1=int(第[1]行)
l2=int(第[2]行)
除了(TypeError,ValueError),e:
err=“第%s行第%s行中l1和/或l2的非整数值-获取:%s”%(
rownum,reader.linenum,row
)
打印>>sys.stderr,错误
结果=“无效值”
其他:
如果l1>10且l2<20:
result=“结果正常”
elif rownum==42:#if/elif/else示例的愚蠢值
result=“问题是什么?”
其他:
result=“result fail”
行。追加(结果)
writer.writerow(行)

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

太好了,谢谢!!如果我想做一个if/ifelse/else条件,你怎么做?再次感谢@Julien:基本的分支都有完整的文档记录,你知道-也许你应该阅读FineManual(tm)(但请看编辑过的代码-并随时接受我的答案)。非常感谢Bruno!我只需将row.append(状态)更改为row.append(结果)即可。再次感谢。@Julien:很抱歉输入错误(已在代码片段中修复)。您可能希望将答案标记为已接受;)
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)