Reading rows from a CSV file in Python
I have a CSV file, here is a sample of what it looks like:
Year: Dec: Jan:
1 50 60
2 25 50
3 30 30
4 40 20
5 10 10
I know how to read the file in and print each column (for ex. - ['Year', '1', '2', '3', etc]
). But what I actually want to do is read the rows, which would be like this ['Year', 'Dec', 'Jan']
and then ['1', '50', '60']
and so on.
And then I would like to store those numbers ['1', '50', '60']
into variables so I can total them later for ex.:
Year_1 = ['50', '60']
. Then I can do sum(Year_1) = 110
.
How would I go about doing that in Python 3?
Solution 1:
Use the csv
module:
import csv
with open("test.csv", "r") as f:
reader = csv.reader(f, delimiter="\t")
for i, line in enumerate(reader):
print 'line[{}] = {}'.format(i, line)
Output:
line[0] = ['Year:', 'Dec:', 'Jan:']
line[1] = ['1', '50', '60']
line[2] = ['2', '25', '50']
line[3] = ['3', '30', '30']
line[4] = ['4', '40', '20']
line[5] = ['5', '10', '10']
Solution 2:
You could do something like this:
with open("data1.txt") as f:
lis = [line.split() for line in f] # create a list of lists
for i, x in enumerate(lis): #print the list items
print "line{0} = {1}".format(i, x)
# output
line0 = ['Year:', 'Dec:', 'Jan:']
line1 = ['1', '50', '60']
line2 = ['2', '25', '50']
line3 = ['3', '30', '30']
line4 = ['4', '40', '20']
line5 = ['5', '10', '10']
or :
with open("data1.txt") as f:
for i, line in enumerate(f):
print "line {0} = {1}".format(i, line.split())
# output
line 0 = ['Year:', 'Dec:', 'Jan:']
line 1 = ['1', '50', '60']
line 2 = ['2', '25', '50']
line 3 = ['3', '30', '30']
line 4 = ['4', '40', '20']
line 5 = ['5', '10', '10']
Edit:
with open('data1.txt') as f:
print "{0}".format(f.readline().split())
for x in f:
x = x.split()
print "{0} = {1}".format(x[0],sum(map(int, x[1:])))
# output
['Year:', 'Dec:', 'Jan:']
1 = 110
2 = 75
3 = 60
4 = 60
5 = 20
Solution 3:
Reading it columnwise is harder?
Anyway this reads the line and stores the values in a list:
for line in open("csvfile.csv"):
csv_row = line.split() #returns a list ["1","50","60"]
Modern solution:
# pip install pandas
import pandas as pd
df = pd.read_table("csvfile.csv", sep=" ")
Solution 4:
The Easiest way is this way :
from csv import reader
# open file in read mode
with open('file.csv', 'r') as read_obj:
# pass the file object to reader() to get the reader object
csv_reader = reader(read_obj)
# Iterate over each row in the csv using reader object
for row in csv_reader:
# row variable is a list that represents a row in csv
print(row)
output:
['Year:', 'Dec:', 'Jan:']
['1', '50', '60']
['2', '25', '50']
['3', '30', '30']
['4', '40', '20']
['5', '10', '10']