鱼C论坛

 找回密码
 立即注册
查看: 681|回复: 10

[已解决]pickle存后读取失败

[复制链接]
发表于 2020-4-3 23:03:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
ret1=a.buttonbox(msg='1 储存    2查询',title='',choices=('储存','查询','删除','关闭'),image='')
        if ret1=='储存':
            msg='填写下列信息'
            title=''
            fields=['用户名','姓名','固定电话','手机号码','QQ','E-mail']
            ret=a.multenterbox(msg,title,fields,values='')
            l={}
            t=''
            for i in range(1,6):
                t+=str(fields[i])+str(ret[i])+' '
            l[fields[0]]=t
            with open('储存111.txt','ab') as wb:                 #打开一个文件进行存储
                pickle.dump(l,wb)
        elif ret1=='查询':
            ret3=a.enterbox('请输入查询的用户名:')
            if ret3=='':
                a.msgbox('请输入用户名进行查询!')
            else:
                lenth=len(ret3)
                with open('储存111.txt','rb') as wb:
                    l1=pickle.load(wb)                               #读取
                    for i in l1:
                        if ret3==i[3:lenth+3]:
                            a.msgbox(i)


可以储存,但是什么都查询不到。
最佳答案
2020-4-4 02:04:41
你存储的不对,
读取后if判断的条件也不对
为什么不在存储进去之前用print看一下存进去的是什么内容呢?
在读出来之后,判断之前也看一下是什么内容
那样你肯定能看出来你的错误在什么地方
我不清楚你到底打算存储什么内容
按照我理解的帮你修改了一下,你看看是不是你想要的
import easygui as a
import pickle

ret1=a.buttonbox(msg='1 储存    2查询',title='',choices=('储存','查询','删除','关闭'),image='')
if ret1=='储存':
    msg='填写下列信息'
    title=''
    fields=['用户名','姓名','固定电话','手机号码','QQ','E-mail']
    ret=a.multenterbox(msg,title,fields,values='')
    l={}
    t=''
    for i in range(6):
        t+=str(fields[i])+str(ret[i])+' ' 
    l[ret[0]]=t
    print(l)
    with open('储存111.txt','ab') as wb:                 #打开一个文件进行存储
        pickle.dump(l,wb)
elif ret1=='查询':
    ret3=a.enterbox('请输入查询的用户名:')
    if ret3=='':
        a.msgbox('请输入用户名进行查询!')
    else:
        lenth=len(ret3)
        with open('储存111.txt','rb') as wb:
            l1=pickle.load(wb)                               #读取
            for i in l1:
                print(i,l1[i])
                if ret3==i:
                    a.msgbox(l1[i])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-4 02:04:41 | 显示全部楼层    本楼为最佳答案   
你存储的不对,
读取后if判断的条件也不对
为什么不在存储进去之前用print看一下存进去的是什么内容呢?
在读出来之后,判断之前也看一下是什么内容
那样你肯定能看出来你的错误在什么地方
我不清楚你到底打算存储什么内容
按照我理解的帮你修改了一下,你看看是不是你想要的
import easygui as a
import pickle

ret1=a.buttonbox(msg='1 储存    2查询',title='',choices=('储存','查询','删除','关闭'),image='')
if ret1=='储存':
    msg='填写下列信息'
    title=''
    fields=['用户名','姓名','固定电话','手机号码','QQ','E-mail']
    ret=a.multenterbox(msg,title,fields,values='')
    l={}
    t=''
    for i in range(6):
        t+=str(fields[i])+str(ret[i])+' ' 
    l[ret[0]]=t
    print(l)
    with open('储存111.txt','ab') as wb:                 #打开一个文件进行存储
        pickle.dump(l,wb)
elif ret1=='查询':
    ret3=a.enterbox('请输入查询的用户名:')
    if ret3=='':
        a.msgbox('请输入用户名进行查询!')
    else:
        lenth=len(ret3)
        with open('储存111.txt','rb') as wb:
            l1=pickle.load(wb)                               #读取
            for i in l1:
                print(i,l1[i])
                if ret3==i:
                    a.msgbox(l1[i])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-4 11:42:54 | 显示全部楼层
sunrise085 发表于 2020-4-4 02:04
你存储的不对,
读取后if判断的条件也不对
为什么不在存储进去之前用print看一下存进去的是什么内容呢?
...

我希望储存进文本的是一个字典,然后查询时用Key查询到字典里的值,然后通过easygui弹出值的信息。你帮着修改后,能在黑框里弹出,但是easygui中无法弹出,我就想知道怎么让值在easygui中弹出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-4 12:49:44 | 显示全部楼层
765838210 发表于 2020-4-4 11:42
我希望储存进文本的是一个字典,然后查询时用Key查询到字典里的值,然后通过easygui弹出值的信息。你帮着 ...

你说的是第29行的a.msgbox无法输出吗?
我这里可以弹出这个msgbox啊。
你看一下你输入的ret3和文件中读出来的l1的key值一样吗?
我给你在程序中添加的print是让你看看读出来的值。
不影响程序的运行,若没有弹出msgbox,很可能是因为你写进去的内容和你查询时输入的值不一样。
注意,每次重新输入保存的时候需要把原来的txt文件删除,否则无法再次写入
我现在放假不在,无法帮你看运行程序结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-4 14:21:06 | 显示全部楼层
sunrise085 发表于 2020-4-4 12:49
你说的是第29行的a.msgbox无法输出吗?
我这里可以弹出这个msgbox啊。
你看一下你输入的ret3和文件中读 ...

嗯嗯,我是希望能存进多个数据,然后读取其中一个,应该怎么办呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-4-4 14:59:47 | 显示全部楼层
765838210 发表于 2020-4-4 14:21
嗯嗯,我是希望能存进多个数据,然后读取其中一个,应该怎么办呢

写文件的时候,以ab+模式打开,
把整个程序放到循环里。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-4 15:55:13 | 显示全部楼层
sunrise085 发表于 2020-4-4 14:59
写文件的时候,以ab+模式打开,
把整个程序放到循环里。

print的时候能显示字典里添加成功了,但是查询的时候显示keyerror :  print(l1[ret3])
KeyError: '你'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-4 15:57:59 | 显示全部楼层
sunrise085 发表于 2020-4-4 14:59
写文件的时候,以ab+模式打开,
把整个程序放到循环里。

只能查询到第一个的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-4 16:55:52 | 显示全部楼层
765838210 发表于 2020-4-4 15:55
print的时候能显示字典里添加成功了,但是查询的时候显示keyerror :  print(l1[ret3])
KeyError: '你'

这个"你"是什么?是你查询的时候输入的ret3?
上面写文件的时候key是你输入的用户名,你输入的用户名有"你"吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-4 16:59:13 | 显示全部楼层
765838210 发表于 2020-4-4 15:57
只能查询到第一个的值

我现在没电脑,不能帮你看程序。
你就多多尝试吧,哪里与预期的不一样,你就用print将之打印出来看看和你预期的有什么差异
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-4 18:34:03 | 显示全部楼层
sunrise085 发表于 2020-4-4 16:55
这个"你"是什么?是你查询的时候输入的ret3?
上面写文件的时候key是你输入的用户名,你输入的用户名有" ...

你是第二个键,只能查询第一个键
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 23:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表