On Sat, Aug 11, 2012 at 11:19 PM, Richard D. Moores <rdmoo...@gmail.com> wrote: > >> To clarify, you can store multiple pickles in a file, but each needs >> its own load. So you'd have to maintain a session dictionary for the >> factors of new integers. Then append the pickled session to the file >> when the user quits. When the program starts you'd have to loop >> through the file to update D with each pickled session. > > Isn't that essentially what my script does?
On line 69 your script (http://pastebin.com/SNwKRuSK) appends the current D to the end. So only the last pickle appended would be complete. My first response was for you to switch to 'wb' mode to truncate the file and only save the latest complete session. Then it occurred to me that you actually wanted to grow the pickle the file. I proposed the above solution to append the new factorizations per session. Then at the start load the pickled sessions in a loop, updating D with each loaded dictionary. For example: D = {} session = {} try: with open('factors.dat', 'rb') as f: while True: D.update(pickle.load(f)) except EOFError: pass except (IOError, pickle.PickleError): D = {} if len(D): print("Loaded", len(D), "entries.") while True: n = int(input("integer: ")) if n == 0: print("D has", len(D), "entries.") with open('factors.dat', 'ab') as f: pickle.dump(session, f) break try: factors = D[n] print("the factors of", n, "are", factors) except KeyError: factors = factorsOfInteger(n) print("the factors of", n, "are", factors) D[n] = factors session[n] = factors _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor