开发者

Looping through columns in a .csv files in Python

I want to be able to use Python to open a .csv file like this:

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

and then perform some operation on them like addition.

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]) 

The problem is that since the .csv file only has one row and an unknown number of columns, I don't know how to make this work without either开发者_C百科 hard-coding it like or using really ugly code.

Is there any way of looping through the columns using something like for columns in file in Python?


You can just say

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

For example:

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

The reason why you can do this is that csv.reader returns a simple list for every row, so you can iterate over it as you would any other list in Python.

However, in your case, since you know that you have a file with a single line of comma-separated integers, you could make this much simpler:

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


You can iterate over a list of columns just as you iterate over the rows in a csv reader:

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

Or you can add the sum of each row on each pass, and skip the inside loop:

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

Or you can save creating an extra list by using itertools.imap instead of map.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜