Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

List generated from csv.reader not looping

New to python, so open to any suggestions of simplicity, pep, modules, etc.

Trying to create a script that can search for a value in a csv, (in this case grab the header fields) then index those values as variables. I’m able to grab the header from the ​CSV, but I can’t get the list to loop through those values. Yes, I can create a second loop inside the original loop, but that’s not the expected behavior. What am I missing?

import csv

data = [['SKU', 'Color', 'Delivery', 'Angles'], ['A1234', 'Red', 'Week 1', 'On-model, Pinup'], ['B4321', 'Black', 'Week 2', 'On-model'], ['JJ4567', 'Blue-Multi', 'Week 1', 'Pinup'], ['ClassicTee', 'Pink', 'Week 3', 'On-model, Pinup, Detail']]

with open('SKU_test3.csv', 'w') as csv_file_write:
   ​csv_writer = csv.writer(csv_file_write, delimiter=',')
   ​for row in data:
       ​csv_writer.writerow(row)

with open('SKU_test3.csv', 'r+') as csv_file_append:
   ​csv_reader = csv.reader(csv_file_append, delimiter = ',')
   ​header_names = []
   ​for row in csv_reader:
       ​header_names.append(row)
       ​break

print(type(header_names)) # returns: <class 'list'>

for i in header_names:
   ​print(i) # returns: ['SKU', 'Color', 'Delivery', 'Angles']

for j in i:
    print(j) # returns items as expected, but why is a nested loop needed?

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

You’re nesting the list of headers inside the header_names list. You should just assign it directly instead of using append().

with open('SKU_test3.csv', 'r+') as csv_file_append:
   ​csv_reader = csv.reader(csv_file_append, delimiter = ',')
   ​header_names = next(csv_reader)

If you just want the first element of a generator, you can use next() rather than a single iteration of a loop.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading