LOTUSMS
LOTUSMS

Reputation: 10240

storing to a file and retrieving the content of a file with Python

I have this code I built following a tutorial and I am successfully stored to a file. I checked the file physically to ensure the info is there and it is. But retrieving it is giving me a hard time. I have stared at it for hours and can't find anything wrong with it. If you follow the steps 2 - 2 1 - 5 - 9 and re-run it and then do step 6 - 1 You will notice the first set of steps are fine the second set of menu options are not.

This is what I have.

team.py class file

#Team class definition

class Team:

    #initializing object

    def __init__(self, name, phone, jersey):

        self.__name = name

        self.__phone = phone

        self.__jersey = jersey


    #mutator methods

    def setname(self, name):

        self.__name = name

    def setphone(self, phone):

        self.__phone = phone

    def setjersey(self, jersey):

        self.__jersey = jersey



    #accessor methods

    def getname(self):

        return self.__name

    def getphone(self):

        return self.__phone

    def getjersey(self):

        return self.__jersey


    #display template for output
    def displayData(self):

        print("")

        print("Team information: ")

        print("------------------------")

        print("Member's Name:", self.__name)

        print("Phone Number:", self.__phone)

        print("Jersey Number:", self.__jersey)

members.py program file

# program functions and import data

import team


def displayMenu():
    print("===========Main Menu===========")

    print("1. Team Roster.")

    print("2. Add Member.")

    print("3. Remove Member.")

    print("4. Edit Member.")

    print("5. Save Data.")

    print("6. Load Data.")

    print("9. Exit Program.")

    print("")

    return int(input("Selection> "))

def printMember(members):
    if len(members) == 0:

        print("No members in roster yet.")

    else:

        for x in members.keys():
            members[x].displayData()

def addMember(members):
    newName = input("Enter new member's name: ")

    newPhone = int(input("Enter member's phone number: "))

    newJersey = input("Enter member's jersey number: ")

    members[newName] = team.Team(newName, newPhone, newJersey)

    return members

def removeMember(members):
    removeName = input("Enter the member's name you wish to remove: ")

    if removeName in members:

        del members[removeName]

        print("\nYou've removed ", removeName)

    else:

        print("This name is not in our records.")

    return members

def editMember(members):

    oldName = input("Enter the name of the member you want to edit: ")

    if oldName in members:

        newName = input("Enter the member's new name: ")

        newPhone = int(input("Enter the member's new phone number: "))

        newJersey = input("Enter the member's new jersey number: ")

        members[oldName] = team.Team(newName, newPhone, newJersey)

    else:

        print("Member does not exist")

    return members

def saveData(members):

    filename = input("Filename to save: ")

    print("Saving data...")

    outFile = open(filename, "wt")

    for x in members.keys():

        name = members[x].getname()

        phone = str(members[x].getphone())

        jersey = members[x].getjersey()

        outFile.write(name + "," + phone + "," + jersey + "\n")

    print("Data saved.")

    outFile.close()

def loadData():

    members = {}

    filename = input("Filename to load: ")

    inFile = open(filename, "rt")

    print("Loading data...")

    while True:

        # read in a line of text from the text file

        inLine = inFile.readline()

        # if line is empty, stop loading data.

        if not inLine:

            break

        inLine = inLine[:-1]

        name, phone, jersey = inLine.split(",")

        members[name] = team.Team(name, phone, jersey)

    print("Data Loaded Successfully.")

    inFile.close()

    return members

# Running the program

print("Welcome to the Team Manager")

members = {}

menuSelection = displayMenu()

while menuSelection != 9:

    if menuSelection == 1:

        printMember(members)


    elif menuSelection == 2:

        members = addMember(members)


    elif menuSelection == 3:

        members = removeMember(members)


    elif menuSelection == 4:

        members = editMember(members)

    elif menuSelection == 5:

        filename = saveData(members)

    elif menuSelection == 6:

        filename = loadData()

    menuSelection = displayMenu()

print("Exiting Program...")

Help me or I'll become an alcoholic :) haha Here is the IDEONE

Upvotes: 0

Views: 126

Answers (1)

OneCricketeer
OneCricketeer

Reputation: 191681

saveData returns nothing, not the filename

filename = saveData(members)

loadData does not return the filename, it returns the members.

filename = loadData()

I'd suggest researching how global variables work in Python. You only need one instance of members.

If you're looking for a better way to perform the CRUD operations, use sqlite module of Python

And, by the way, Pycharm has a useful debugger.

Upvotes: 1

Related Questions