765838210 发表于 2020-4-3 23:03:12

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(1,6):
                t+=str(fields)+str(ret)+' '
            l]=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:
                            a.msgbox(i)


可以储存,但是什么都查询不到。

sunrise085 发表于 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)+str(ret)+' '
    l]=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)
                if ret3==i:
                  a.msgbox(l1)

765838210 发表于 2020-4-4 11:42:54

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

我希望储存进文本的是一个字典,然后查询时用Key查询到字典里的值,然后通过easygui弹出值的信息。你帮着修改后,能在黑框里弹出,但是easygui中无法弹出,我就想知道怎么让值在easygui中弹出

sunrise085 发表于 2020-4-4 12:49:44

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

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

765838210 发表于 2020-4-4 14:21:06

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

嗯嗯,我是希望能存进多个数据,然后读取其中一个,应该怎么办呢

sunrise085 发表于 2020-4-4 14:59:47

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

写文件的时候,以ab+模式打开,
把整个程序放到循环里。

765838210 发表于 2020-4-4 15:55:13

sunrise085 发表于 2020-4-4 14:59
写文件的时候,以ab+模式打开,
把整个程序放到循环里。

print的时候能显示字典里添加成功了,但是查询的时候显示keyerror :print(l1)
KeyError: '你'

765838210 发表于 2020-4-4 15:57:59

sunrise085 发表于 2020-4-4 14:59
写文件的时候,以ab+模式打开,
把整个程序放到循环里。

只能查询到第一个的值

sunrise085 发表于 2020-4-4 16:55:52

765838210 发表于 2020-4-4 15:55
print的时候能显示字典里添加成功了,但是查询的时候显示keyerror :print(l1)
KeyError: '你'

这个"你"是什么?是你查询的时候输入的ret3?
上面写文件的时候key是你输入的用户名,你输入的用户名有"你"吗?

sunrise085 发表于 2020-4-4 16:59:13

765838210 发表于 2020-4-4 15:57
只能查询到第一个的值

我现在没电脑,不能帮你看程序。
你就多多尝试吧,哪里与预期的不一样,你就用print将之打印出来看看和你预期的有什么差异

765838210 发表于 2020-4-4 18:34:03

sunrise085 发表于 2020-4-4 16:55
这个"你"是什么?是你查询的时候输入的ret3?
上面写文件的时候key是你输入的用户名,你输入的用户名有" ...

你是第二个键,只能查询第一个键
页: [1]
查看完整版本: pickle存后读取失败