首先,我知道这篇文章指出我必须重写整个文件才能从 pickle 保存的数据中删除 1 个项目。
我有一个文件,它以二进制形式保存用户名和密码(密码的哈希值)。它是由以下代码创建的:
import pickle
import hashlib
def Encryption(data):
return hashlib.sha224(data).hexdigest()
db = {'user1' : Encryption('password1'), 'user2' : Encryption('password2'), 'user3' : Encryption('password3')}
fh = open('database.db', 'wb')
pickle.dump(db, fh)
fh.close()
我想user2,password2
从文件中删除(第二个条目)。所以这就是我所做的
import pickle
import hashlib
from os import path
n='user2'
def Encryption(data):
return hashlib.sha224(data).hexdigest()
if path.isfile('database.db'):
fh=open('database.db','rb')
db=pickle.load(fh)
fh.close()
_newlist,_newlist2=([] for i in range (2))
_username=[]
_password=[]
#Get the user names and passwords hash values into two different list
for user in db:
_username.append(user)
_password.append(db[user])
#If user name is equal to the user name i want to delete, skip . Else append it to new list
for i in range(len(_username)):
if n==_username[i]:
pass
else:
_newlist.append(_username[i])
_newlist2.append(_password[i])
#Clear the file
fh=open('database.db','wb')
fh.close()
#Re-write the new lists to the file
for i in range(len(_newlist)):
db={_newlist[i]:_newlist2[i]}
fh = open('database.db', 'ab')
pickle.dump(db,fh)
它没有删除第二个条目(user2,password2),而是删除了除最后一个条目之外的所有条目。Colud有人帮我指出我的代码有什么问题吗?