Search code examples
pythonexcelfunctioncsvblank-line

CSV File Writing Only Headers


I'm trying to write a CSV file that takes random names, scores, a letter grades and produces a CSV file. When i run it on PyCharm i creates exactly that, but when i check the CSV file that it produced it is empty except for the headers.

import random
import csv
fname = ['Red','Jose','Mikasa','Sakura','Naruto','Momoka','Zero','Ryu','Ken','Geralt','Greg','Mika','Momo','Xenovia','John','Gary','Lance','Eren','Duke','Claire']
lname = ['Akerman','Haruno','Johnson','Rivia','Valentine','Redfield','Kennedy','Juarez','Jameson','Williams','Miller','Davis','Thompson','Garcia','Remington','Hayabusa','Strife','Armstrong','Kojima','Chambers']
grade = ['A','B','C','D','F']
def ranint():
    value = random.randint(60, 100)
    print(value)
def ranname():
    first = random.choice(fname)
    last = random.choice(lname)
    print(first,last)
    fname.remove(first)
    lname.remove(last)
def rangrade():
    fgrade = random.choice(grade)
    print(fgrade)

with open('grades.csv','w',newline='') as fp:
    a = csv.writer(fp,delimiter=',')
    data = [['Name', 'Assignment1', 'Assignment2', 'Assignment3', 'Assignment4', 'Quiz1', 'Quiz2', 'Quiz3', 'Quiz4', 'Total_Grade'],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()]]
    a.writerows(data)

Solution

  • Your functions don't return anything, they just print the random value. Add a return statement at the end of each function. And you have to combine first with last before returning the value, e.g. with join.

    import random
    import csv
    fname = ['Red','Jose','Mikasa','Sakura','Naruto','Momoka','Zero','Ryu','Ken','Geralt','Greg','Mika','Momo','Xenovia','John','Gary','Lance','Eren','Duke','Claire']
    lname = ['Akerman','Haruno','Johnson','Rivia','Valentine','Redfield','Kennedy','Juarez','Jameson','Williams','Miller','Davis','Thompson','Garcia','Remington','Hayabusa','Strife','Armstrong','Kojima','Chambers']
    grade = ['A','B','C','D','F']
    
    def ranint():
        value = random.randint(60, 100)
        #print(value)
        return value
    
    def ranname():
        first = random.choice(fname)
        last = random.choice(lname)
        #print(first,last)
        fname.remove(first)
        lname.remove(last)
        return "; ".join([first, last])
    
    def rangrade():
        fgrade = random.choice(grade)
        #print(fgrade)
        return fgrade
    
    with open('grades.csv','w',newline='') as fp:
        a = csv.writer(fp,delimiter=',')
        data = [['Name', 'Assignment1', 'Assignment2', 'Assignment3', 'Assignment4', 'Quiz1', 'Quiz2', 'Quiz3', 'Quiz4', 'Total_Grade'],
            [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
            [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
            [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()]]
        a.writerows(data)