Using cPickle

Steve Holden steve at holdenweb.com
Fri Feb 6 10:25:57 EST 2009


mmcclaf wrote:
> Hi there,
> 
> I have to make a small database using cPickle. I'm having troubles
> trying to read in the information if it's more than one line. I'm
> pretty sure it's in the line "for line in stuff:" Can anyone help me
> out? Basically the end result is wanting it to look something like
> what is down below when list is typed in:
> 
> Last name                 First Name                Email Address
> Doe                          John
> john at doe.com
> 
> 
> [code]
> # @author: Ocdt Murray McClafferty 24656
> # This will manage a small database using the cPickle module.
> # It must maintain a list of last names, first names and email
> addresses, and must let a user interact with the program
> 
> #
> #!usr/bin/python
> # -*- coding: utf-8 -*-
> 
> import sys
> import cPickle
> 
> #
> format = '%s             %s                  %s'
> 
> try:
> 	filename = sys.argv[1]
> 	input = open(filename, 'r')
> 
> except IOError:
> 	print 'File is not available, will create a new file now'
> 	lastName='Last Name'
> 	firstName='First Name'
> 	email= 'Email'
> 	#input.close()
> 	output=open (filename, 'w')
> 	total = format%(lastName, firstName, email)
> 	cPickle.dump(total,output)
> 	#cPickle.dump(firstName,output)
> 	#cPickle.dump(email,output)
> 	output.close()
> except EOFError:
> 	print 'File is empty'
> 
> #datas = cPickle.load(input)
> 
> while True:
> 	command=sys.stdin.readline()[:-1]
> 	if command=='list': #lists the data in the file
> 		input = open(filename, 'r')
> 		stuff=cPickle.load(input)
> 		for line in stuff:
> 			#firstName=cPickle.load(input)
> 			#email=cPickle.load(input)
> 			#print repr (lastName).rjust(10), repr(firstName).rjust(20), repr
> (email).rjust(20)
> 			stuff=cPickle.load(input)
> 			print stuff
> 			print line
> 
> 		input.close()
> 
> 	if command=='exit' or command=='quit' : #NEVER forget the exit!!!
> 		print 'Save changes? y for Yes, n for No'
> 		commandSave=sys.stdin.readline()[:-1]
> 		if commandSave =='y': #if the user wants to save
> 			output=open(filename, 'w')
> 			cPickle.dump(work,output)
> 			output.close()
> 			sys.exit(0)
> 		if commandSave =='n': #no save
> 			input.close()
> 			sys.exit(0)
> 
> 	if command=='add': #adds an entity to the file
> 		print 'Last name?'
> 		lastName=sys.stdin.readline()[:-1]
> 		print 'First name?'
> 		firstName=sys.stdin.readline()[:-1]
> 		print 'Email address?'
> 		email=sys.stdin.readline()[:-1]
> 		work = format%(lastName, firstName, email)
> 		#output=open(filename, 'w')
> 		#data=cPickle.load(output)
> 		#data.append(work)
> 		#output.close()
> 		output=open(filename, 'a')
> 		cPickle.dump(work,output)
> 		output.close()
> 
> [/code]
> 
> All help would be appreciated. I am new to Python and this seems to be
> quite a challenge for me.

Make sure you use modes "rb" and "wb" when you open the pickle files. If
you are running on Windows this can make a difference.

regards
 Steve
-- 
Steve Holden        +1 571 484 6266   +1 800 494 3119
Holden Web LLC              http://www.holdenweb.com/




More information about the Python-list mailing list