KAM
KAM

Reputation: 117

Reading in csv file and converting to upper case in python

I'm trying to read in a csv file using the csv library. I'm attempting to iterate through each line but convert to upper case before I attempt some useful function with each line.

import csv
reader = csv.DictReader(open('sample.csv', 'rb'))
for line in reader:
    line = line.upper()
    name = line['Name']

The above code doesn't appear to work. It fails when I attempt to convert the line read in to upper. I can change each column of the csv file read in to upper individually (using dictionary key) but I want to avoid that since there are lots of keys in the dictionary.

Upvotes: 1

Views: 4589

Answers (2)

Moses Koledoye
Moses Koledoye

Reputation: 78554

You can pre-process each line from the file object using a generator expression, before passing them to csv.DictReader which returns an iterable of dicts:

with open('sample.csv', 'rb') as f:
    header = next(f).strip().split(',')
    reader = csv.DictReader((l.upper() for l in f), fieldnames=header)
    for line in reader:
        name = line['Name']

Demo:

>>> f = ['a,b', 'c,d']
>>> c = csv.DictReader((l.upper() for l in f), fieldnames=('h1', 'h2'))
>>> list(c)
[{'h2': 'B', 'h1': 'A'}, {'h2': 'D', 'h1': 'C'}]

Upvotes: 2

ujawg
ujawg

Reputation: 221

You can use:

import codes
txt = 'sampole.csv'
with codecs.open(txt, 'r', encoding='utf-8') as f:
    lines = f.readlines()
    lines = [x.upper() for x in lines]
lines

Upvotes: 1

Related Questions