Home > Back-end >  How to repeat a function with a for loop
How to repeat a function with a for loop

Time:11-13

I open a file and read it with csv and I am trying to move the content to a function so that it can be reused in other programs in this format:

my-dic = []
with open('customer.csv','r') as input_file:

    csv_reader = csv.reader(input_file,delimiter = ',')

    for line_number, line in enumerate(csv_reader):
    
        if line_number == 0: # skip the header
       
            continue
   
    
        def customer_file(): 
    
            my_dic.append({
        
                'First Name':line[1],
                'Last name':line[2],
                'Age(Years)':int(line[3]),
       })
customer_file()

the csv files has 100 rows and ! am expecting the dictionary to be created for all the rows.On calling the function only the last row of the file is created . I read that this is late binding and that I have to force early binding by using default argument in the function. I passed line_number = 1, as parameter in the function so that it will start from line_number 1 of the csv file, this does not work too

How can I implement this so that when I call the function, the dictionary created will contain all the rows of the csv file not the last row only

CodePudding user response:

If you wish to simplify your problem you can make use of list comprehension to obtain your required solution by using next(csv_reader) in order to skip the first iteration of the loop.

import csv

with open('customer.csv','r') as input_file:
    csv_reader = csv.reader(input_file,delimiter = ',')
    next(csv_reader) # Skip header
    my_dic = [{"First Name": line[0], "Last Name": line[1], "Age(Years)": int(line[2])} for line in csv_reader]

print(my_dic)

I will also provide a similar solution to what you provided as I cannot assume your knowledge with the Python language. The use of a function will not really be needed to append to your my_dic dictionary, so I have eliminated that. You may need to adjust the indices where your data is situated as I am working of sample data I created.

import csv

my_dic = []
with open('customer.csv','r') as input_file:
    csv_reader = csv.reader(input_file,delimiter = ',')
    next(csv_reader) # Skip header

    for n, line in enumerate(csv_reader):
        print(line)
        my_dic.append({
            'First Name':line[0],
            'Last name':line[1],
            'Age(Years)':int(line[2]),
        })

print(my_dic)

UPDATE as per comment

import csv

def dic_append(line):
    my_dic.append({"First Name": line[0], "Last Name": line[1], "Age(Years)": int(line[2])})

my_dic = []
with open('customer.csv','r') as input_file:
    csv_reader = csv.reader(input_file, delimiter = ',')
    next(csv_reader) # Skip header
    for line in csv_reader:
        dic_append(line)

print(my_dic)
  • Related