I am trying to use a pickle in Python and I am failing miserably. For each error that I overcome I get another message. I get the following message when I run my code. I am getting a syntax error for my use of 'else'. Why is that?
I am a newb to Python but I can't figure out what am I doing wrong?
import pickle
def main():
file_mail = open('email.dat','wb')
save_data(file_mail)
file_mail.close()
def save_data(file):
email = {}
count = 0
while count == 0:
print('Add an email: 1')
print('Modify an email: 2')
print('Delete an email: 3')
print('Display the list: 4\n')
choice = input('Enter a number from the list above:')
if int(choice)== 1:
name = input('Name:')
mail = input('E-mail:')
email[name] = mail
print('Added Successfully')
if int(choice) == 2:
name = input('Name:')
mail = input('E-mail:')
email[name] = mail
print('Modified Successfully')
if int(choice) == 3:
name = input('Name:')
mail = input('E-mail:')
email[name] = mail
print('Deleted Successfully')
if int(choice) == 4:
print(email)
else:
print('Invalid selection')
c = input('Do you want to continue y/n: ')
if c.upper() == 'N':
count = 1
print('Invalid Letter')
file_mail = open('email.dat','wb')
pickle.dump(email,file_mail)
file_mail.close()
main()
asked Apr 4, 2017 at 5:36
Part_Time_Nerd
1,0147 gold badges30 silver badges60 bronze badges
2 Answers 2
Try to use rb mode when reading a pickle-containing file :
file_mail = open('email.dat','rb')
email = pickle.load(file_mail)
And use wb mode when writing a pickled representation of obj to the open file object:
output = open('data.pkl', 'wb')
pickle.dump(data1, output)
See more details from pickle example.
answered Apr 4, 2017 at 5:39
McGrady
11.5k14 gold badges54 silver badges70 bronze badges
Sign up to request clarification or add additional context in comments.
6 Comments
Part_Time_Nerd
That was my original but I got the error message email = pickle.load(file_mail) EOFError: Ran out of input
McGrady
@BWMustang13 you should check that the file is not empty, that's why you got the
EOFError error.McGrady
Have look at this answer Why do I get "Pickle - EOFError: Ran out of input" reading an empty file?
Part_Time_Nerd
I believe I ran it as the post suggested but I got the same error.
Part_Time_Nerd
I updated my question to incorporate a slightly different approach by segregating i into 2 separate functions. See my changes above, but I am getting an invalid syntax error with the else statement. Why is that? It might be because I have been looking at code the last 18 hours but it looks like the indentations should be correct.
|
Thanks @McGrady! Here is the final answer I got.
import pickle
def main():
file_mail = open('email.dat','wb')
save_data(file_mail)
file_mail.close()
def save_data(file):
email = {}
count = 0
while count == 0:
print('Add an email: 1')
print('Modify an email: 2')
print('Delete an email: 3')
print('Display the list: 4\n')
choice = input('\nEnter a number from the list above:')
if int(choice)== 1:
name = input('Name:')
mail = input('E-mail:')
email[name] = mail
print('Added Successfully\n')
else:
if int(choice) == 2:
name = input('Name:')
mail = input('E-mail:')
if name in email:
email[name] = mail
print('Modified Successfully\n')
else:
print('Name not found')
else:
if int(choice) == 3:
name = input('Enter name you want to delete:')
if name in email:
email.pop(name)
print('Deleted Successfully\n')
else:
print('Name not found')
else:
if int(choice) == 4:
print(email)
else:
print('Invalid selection\n')
c = input('Do you want to continue y/n: ')
if c.upper() == 'N':
count = 1
else:
if c.upper() == 'N':
count = 1
print('Invalid Letter')
file_mail = open('email.dat','wb')
pickle.dump(email,file_mail)
file_mail.close()
main()
answered Apr 4, 2017 at 7:56
Part_Time_Nerd
1,0147 gold badges30 silver badges60 bronze badges
Comments
lang-py
'wb'which means write binary mode. Change that to'rb'- read binary mode.