Python Pickle只挑选了其中的一部分

Python Pickle只挑选了其中的一部分,python,pickle,Python,Pickle,如果我有一个包含七个具有类似名称的项的列表,那么它只会在pickle文件中填充其中的六个项。六项似乎是问题的起点,但如果我将其移动到九项,它将显示八项 在代码中,它不会在函数access\u密码中的data2的完整迭代下显示它们。但他们会在功能访问下准确拉动。所以他们正在填充,但是应该打印设备+密码的迭代似乎没有正常工作 def添加_密码(): 数据=[] newdata=[] pw_file_r=open('K:\\Downloads\\Chrome Downloads\\pickle.tx

如果我有一个包含七个具有类似名称的项的列表,那么它只会在pickle文件中填充其中的六个项。六项似乎是问题的起点,但如果我将其移动到九项,它将显示八项

在代码中,它不会在函数access\u密码中的data2的完整迭代下显示它们。但他们会在功能访问下准确拉动。所以他们正在填充,但是应该打印设备+密码的迭代似乎没有正常工作


def添加_密码():
数据=[]
newdata=[]
pw_file_r=open('K:\\Downloads\\Chrome Downloads\\pickle.txt','rb')#修改到本地文件夹并创建
#pickle.txt文件
尽管如此:
尝试:
data.append(pickle.load(pw_文件_r))
除EOFError外:
打破
文件关闭()
pwordN=int(输入('输入要命名的设备数:'))
对于范围内的i(pwordN):
原始=输入('输入设备名称'+str(i)+':')
newdata.append(原始)
对于newdata中的x:
全局键变量
data.append(x)
pw_file_w=open('K:\\Downloads\\Chrome Downloads\\pickle.txt','ab')#修改到本地文件夹
pickle.dump(x,pw_文件w)
文件关闭()
newpass=getpass.win_getpass(prompt='输入设备'+x+':'的密码,stream=None)
newpass_to_bytes=字节(newpass,'utf-8')
key=base64.urlsafe_b64encode(字节(keyvar,'utf-8'))
cipher_suite=Fernet(密钥)
ciphered_text=cipher_suite.encrypt(newpass_to_字节)
db_update=shelve.open('K:\\Downloads\\Chrome Downloads\\device_shelf.db')#修改到本地文件夹
尝试:
db_更新[x]=加密的_文本
最后:
db_update.close()
def访问_密码():
数据2=[]
数据2.clear()
全局键变量
pw_file_r=open('K:\\Downloads\\Chrome Downloads\\pickle.txt','rb')#修改到本地文件夹
而1:
尝试:
data2.append(pickle.load(pw_文件_r))
除EOFError外:
打破
文件关闭()
对于数据2中的x1:
db_read=shelve.open('K:\\Downloads\\Chrome Downloads\\device_shelf.db')#修改到本地文件夹
尝试:
设备=db_读取[x1]
最后:
db_read.close()
key=base64.urlsafe_b64encode(字节(keyvar,'utf-8'))
cipher_suite=Fernet(密钥)
加密文本=设备
未加密文本=(加密套件.解密(加密文本))
明文=字节(未加密的文本)。解码(“utf-8”)
打印('设备'+x1+'的密码为'+TXT〕)
restart=input('是否要重新启动程序?[是/否]:')
如果重新启动==“是”:
frun()
其他:
通过

如果有人再次遇到这样的问题,我无法解决,但我想我至少知道问题的来源。在程序完全结束之前,Pickle不会完全填充Pickle文件。一旦结束并重新初始化,数据库将显示完整列表,pickle文档将显示列表中的每个条目。这似乎是模块编码与编程逻辑相反的问题。谢谢。如果有人再次遇到这样的问题,我无法解决,但我想我至少知道问题的来源。在程序完全结束之前,Pickle不会完全填充Pickle文件。一旦结束并重新初始化,数据库将显示完整列表,pickle文档将显示列表中的每个条目。这似乎是模块编码与编程逻辑相反的问题。谢谢