我将向您展示代码,我用一个带有字段ID,描述的银行实体制作了一个简单的文本文件。我的问题是如何通过pickle运行文件中的对象,因为我加载了内容,处理过,删除了文件并保存了,另一种方法是这样做?感谢
import pickle, os
class Bank:
def __init__(self, id, description):
self.id = id
self.description = description
def __str__(self):
return "Id: {0}\nDescription: {1}".format(self.id, self.description)
class Banks:
def __init__(self):
self.filename = 'banks.txt'
self.load()
def load(self):
try:
with open(self.filename, 'rb') as f:
self.banks = pickle.load(f)
except:
self.banks = []
def exists(self, code):
if self.banks:
for b in self.banks:
if b.id == code:
return True
return False
def save_data(self):
if os.path.isfile(self.filename):
os.remove(self.filename)
with open(self.filename, 'wb') as f:
pickle.dump(self.banks, f)
def search(self, code):
for pos, b in enumerate(self.banks):
if b.id == code:
return pos, b
return 0, None
def add_bank(self, code):
description = raw_input("Description: ")
bank = Bank(code, description)
self.banks.append(bank)
self.save_data()
def show_bank(self, code):
if self.exists(code):
pos, bank = self.search(code)
print bank
else:
print "bank does not exist"
raw_input("Press ENTER to continue")
def update(self, code):
if self.exists(code):
pos, bank = self.search(code)
print bank
print "Write new data: "
description = raw_input('Description:')
self.banks[pos].description = description
self.save_data()
print "successfully updated"
else:
print "Bank does not exist"
raw_input("Press ENTER to continue")
def delete(self, code):
if self.exists(code):
pos, bank = self.search(code)
print bank
confirm = raw_input("Are you sure? (Y/N): ").upper()
if confirm == 'Y':
del self.banks[pos]
self.save_data()
print "successfully deleted"
else:
print "Bank does not exist"
raw_input("Press ENTER to continue")
def menu():
while True:
prompt = "1) Create\n"
prompt += "2) Read\n"
prompt += "3) Update\n"
prompt += "4) Delete\n"
prompt += "5) Exit\n"
prompt += "Choose: "
choose = int(raw_input(prompt))
banks = Banks()
if choose == 1:
code = int(raw_input("Id Bank: "))
if not banks.exists(code):
banks.add_bank(code)
print "successfully recorded"
else:
print "bank already exists"
raw_input("Press Enter to continue")
elif choose == 2:
code = int(raw_input("Id Bank: "))
banks.show_bank(code)
elif choose == 3:
code = int(raw_input("Id Bank: "))
banks.update(code)
elif choose == 4:
code = int(raw_input("Id Bank: "))
banks.delete(code)
elif choose == 5:
break
menu()