如何在for循环csv python中访问某些列值

时间:2014-04-25 07:51:29

标签: python csv

这是我的csv文件:

a,b,c,d,e,
0,100,0,0,0
0,1500,0,0,0
0,2350,0,0,0
0,3700,0,0,0
0,5060,0,0,0

和我的python代码:

import csv, os, sys
y = int(sys.argv[1])

with open("csvinput.csv", 'rb') as input, open('temp.csv', 'wb') as output:
        reader = csv.reader(input, delimiter = ',')
        writer = csv.writer(output, delimiter = ',')

        all = []
        header = next(reader)
        header.insert(0, 'ID')
        all.append(header)
        count = 0
        del header[1]
        del header[-1]
        for row in reader:
                kount = row[1]
                count += 1
                while y<kount:
                        del row[0]
                        del row[-1]
                        all.append(row)
                        row.insert(0, count)
                        break
        writer.writerows(all)

我想输入“python python.py 2000”然后让我的temp.csv看起来像这样:

a,b,c,d,e,
0,100,0,0,0
0,1500,0,0,0

因此y参数(sys.argv [1])将是基于b值的行数的上限。因此,如果第4行是3700并且我输入4000,则打印出所有行,直到3700是最后一行(因为5060超过4000)。

问题是现在kount不起作用。我无法访问b列的值。

1 个答案:

答案 0 :(得分:1)

您需要将列b的值转换为能够进行该比较的整数,即将yint(kount)进行比较。这有效(为了清晰起见,重写代码):

import csv, os, sys
y = int(sys.argv[1])

with open("csvinput.csv", 'rb') as input, open('temp.csv', 'wb') as output:
        reader = csv.reader(input, delimiter = ',')
        writer = csv.writer(output, delimiter = ',')

        header = next(reader)
        outdata = []
        outdata.append(header)

        for row in reader:
                kount = int(row[1])
                if y > kount:
                        outdata.append(row)

        writer.writerows(outdata)


编辑:您的代码也会产生一个csv,其中b&gt; y,与你想要达到的目标相反。它以一种有趣的方式删除列,在标题中留下5列,在正文中留下4列