1

I tried to create some code to write new registered users to a csv File. It was replacing the existing user in the file. Now it's not entering any of the data. I'm not sure where I went wrong.

This is the code:

FirstName = input("Enter your  first name: ")
Surname = input("Enter your surname: ")
Age = input("Enter your age: ")
YearGroup = input("Enter your year group: ")
userName = input("Create a unique username: ")
passWord = input("Create a password: ")
fieldnames =['Username', 'Surname', 'First Name', 'Age', 'YearGroup', 'passWord']
reG = [{'Username': userName, 'Surname': Surname, 'First Name': FirstName,
                    'Age': Age, 'YearGroup': YearGroup, 'passWord': passWord}]
with open('StudentUserName.csv', 'w', newline='\n') as csvUser:
    reG = [{'Username': userName, 'Surname': Surname, 'First Name': FirstName,
                    'Age': Age, 'YearGroup': YearGroup, 'passWord': passWord}]
    writer = csv.DictWriter(csvUser, fieldnames)
    #writer.seek(0,2)
    writer.writeheader()
    writer.writerow(reG)

    #writer.writerow("\r")
    #writer.writerow({userName, Surname, FirstName,
    #                 Age, YearGroup, passWord})
csvUser.close()
print ("Registration completed")
Bugs
  • 4,491
  • 9
  • 32
  • 41
  • Won't run as it is need to be:`reG = {'Username': userName, 'Surname': Surname, First Name': FirstName, 'Age': Age, 'YearGroup': YearGroup, 'passWord': passWord}` – FelixEnescu Jun 19 '18 at 15:42

1 Answers1

0

Here are a few tweaks to get your program working as intended:

import csv
import os

FirstName = input("Enter your  first name: ")
Surname = input("Enter your surname: ")
Age = input("Enter your age: ")
YearGroup = input("Enter your year group: ")
userName = input("Create a unique username: ")
passWord = input("Create a password: ")

fieldnames = ['Username', 'Surname', 'First Name', 'Age', 'YearGroup', 'passWord']

filename = 'StudentUserName.csv'

# The file is now opened in append mode instead of write mode.
with open(filename, 'a', newline='\n') as csvUser:

    # reG is now a dictionary, as required by writerow.
    reG = {'Username': userName, 'Surname': Surname, 'First Name': FirstName,
           'Age': Age, 'YearGroup': YearGroup, 'passWord': passWord}

    writer = csv.DictWriter(csvUser, fieldnames=fieldnames)

    # if it's an empty file, write the header
    if os.stat(filename).st_size == 0:
        writer.writeheader()

    writer.writerow(reG)

    # writer.writerow("\r")
    # writer.writerow({userName, Surname, FirstName,
    #                 Age, YearGroup, passWord})
csvUser.close()
print ("Registration completed")
  1. The file is now opened in append mode instead of write mode.
  2. reG is now a dictionary, as required by writerow.
  3. The header is only added if the file is empty.
Ashish Acharya
  • 3,349
  • 1
  • 16
  • 25