Reputation: 7014
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 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?
Upvotes: 6
Views: 47195
Reputation: 19155
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
.
Upvotes: 3
Reputation: 192961
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)
Upvotes: 9