循环遍历Python中的.csv文件中的列

时间:2010-03-16 18:51:16

标签: python csv sum

我希望能够使用Python打开.csv这样的文件:

5,26,42,2,1,6,6

然后对它们执行一些操作,如添加。

total = 0
with open("file.csv") as csv_file:
        for row in csv.reader(csv_file, delimiter=','):
            for number in range(7):
                total += int(row[number]) 

问题在于,由于.csv文件只有一行且列数未知,所以我不知道如何在没有硬编码或使用非常难看的代码的情况下完成这项工作。< / p>

有没有办法在Python中使用类似for columns in file的东西循环遍历列?

2 个答案:

答案 0 :(得分:8)

你可以说

for col in row:
    total += int(col)

例如:

import csv
from StringIO import StringIO

total = 0
for row in csv.reader(StringIO("1,2,3,4")):
    for col in row:
        total += int(col)

print total    # prints 10

你可以这样做的原因是csv.reader为每一行返回一个简单的列表,所以你可以像在Python中的任何其他列表那样迭代它。

但是,在您的情况下,由于您知道您的文件包含一行以逗号分隔的整数,因此您可以更加简单:

line = open("ints.txt").read().split(",")
total = sum(int(i) for i in line)

答案 1 :(得分:3)

您可以在迭代csv阅读器中的行时迭代列表列表:

total = 0
with open("file.csv") as csv_file:
   for row in csv.reader(csv_file, delimiter=','):
        for col in row:
            total += int(col)

或者你可以在每次传递中添加每一行的总和,并跳过内部循环:

total = 0
with open("file.csv") as csv_file:
   for row in csv.reader(csv_file, delimiter=','):
        total += sum(map(int, row))

或者您可以使用itertools.imap代替map来保存创建额外列表。