Jack
Jack

Reputation: 191

Python- Saving Results to a File and Recalling Them

I'm writing a program in Python that will store Student IDs, names, and D.O.B.s.

The program gives the user the ability to remove, add, or find a student. Here is the code:

students={}

def add_student():
  #Lastname, Firstname
  name=raw_input("Enter Student's Name")
  #ID Number
  idnum=raw_input("Enter Student's ID Number")
  #D.O.B.
  bday=raw_input("Enter Student's Date of Birth")

  students[idnum]={'name':name, 'bday':bday}

def delete_student():
  idnum=raw_input("delete which student:")
  del students[idnum]
def find_student():
  print "Find" 
menu = {}
menu['1']="Add Student." 
menu['2']="Delete Student."
menu['3']="Find Student"
menu['4']="Exit"
while True: 
  options=menu.keys()
  options.sort()
  for entry in options: 
    print entry, menu[entry]

  selection=raw_input("Please Select:") 
  if selection =='1': 
    add_student()
  elif selection == '2': 
    delete_student()
  elif selection == '3':
    find_students 
  elif selection == '4': 
    break
  else: 
    print "Unknown Option Selected!" 

The problem I am having is I cannot figure out how to have the program save any added records to a file when the program ends. It also would need to read back the records when the program restarts.

I keep trying to find tutorials for this sort of thing online, but to no avail. Is this the sort of code I'd want to add?:

f = open("myfile.txt", "a")

I'm new to Python so any help would be appreciated. Thanks so much.

Upvotes: 1

Views: 7272

Answers (2)

Joran Beasley
Joran Beasley

Reputation: 113930

import pickle,os
if os.path.exists("database.dat"):
    students = pickle.load(open("database.dat"))
else:
    students = {}
... #your program

def save():
    pickle.dump(students,open("database.dat","w"))

Upvotes: 1

Steve P.
Steve P.

Reputation: 14699

It depends, if you want to actually save python objects, check out Pickle or Shelve, but if you just want to output to a text file, then do the following:

with open('nameOfYourSaveFile', 'w') as saveFile:
    #.write() does not automatically add a newline, like print does
    saveFile.write(myString + "\n")

Here's an answer that explains the different arguments to open, as in w, w+, a, etc.

As an example, say we have:

with open('nameOfYourSaveFile', 'w') as saveFile:
    for i in xrange(10):
         saveFile.write(name[i] + str(phoneNumber[i]) + email[i] + "\n")

To read the file back, we do:

names = []
numbers = []
emails = []

with open('nameOfYourSaveFile', 'r') as inFile:
    for line in inFile:
        #get rid of EOL
        line = line.rstrip()

        #random example
        names.append(line[0])
        numbers.append(line[1])
        emails.append(line[2])

        #Or another approach if we want to simply print each token on a newline
        for word in line:
            print word 

Upvotes: 3

Related Questions