Python-pickle.load()接受一个位置参数(给定2个) [英] Python - pickle.load() takes one positional argument (2 given)

查看:769
本文介绍了Python-pickle.load()接受一个位置参数(给定2个)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这会产生错误:

pickle.load() takes one positional argument (2 given)

这是我的代码:

import pickle, os.path

created = False

phoneBook = {}
name = input("Please enter a name(or press enter to end input): ")
while name != '':
    number = input("Please enter number: ")
    phoneBook[name] = number
    name = input("Please enter a name(or press enter to end input): ")
    if name == '':
        print("Thank You!")

print("Your phonebook contains the following entries:")
for name, number in phoneBook.items():
    print("%s - %s" % (name, number))

while not created:
    if not os.path.isfile('phonebook.json'):
        phoneBook_Ori = pickle.load('phonebook.json', 'r')
        created = True
    else:
        phoneBook_Ori = pickle.load('phonebook.json', 'w')
        phoneBook_Upd = phoneBook_Ori.update(phoneBook)
        phoneBook_Ori.write(phoneBook_Upd)

phoneBook_Ori.close

为什么不腌制数据?

推荐答案

这不是您使用 pickle.load :

This is not how you use pickle.load:

phoneBook_Ori = pickle.load('phonebook.json', 'r')

从文件反序列化时,它以文件对象作为参数,而不是字符串.

It takes a file object as an argument when de-serializing from a file, not strings.

尝试以下方法:

# create file object with permissions
with open('phonebook.json', 'r') as f:
    # load using pickle de-serializer
    phoneBook_Ori = pickle.load(f)

保存几乎相同,请确保您在范围内拥有更新的phonebook:

Saving is almost the same, make sure you have the updated phonebook in scope:

with open('phonebook.json', 'wb') as f:
    phoneBook_Ori = pickle.dump(phonebook, f)

对于其余的代码,您可能需要阅读另一个答案我给出的内容非常相似.

As for the rest of the code, you may want to read another answer I've given that is very similar.

这篇关于Python-pickle.load()接受一个位置参数(给定2个)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆