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?
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
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With