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