pickle-python的问题

pickle-python的问题,python,python-3.x,pickle,Python,Python 3.x,Pickle,我最近用pickle的一个外部文档制作了一个程序。但是当它尝试用pickle加载文件时,我遇到了这个错误(文件已经存在,但当文件不存在时也会失败): 这里的打印显示执行了哪些行。这里的os.system允许写入文件,但错误仍然存在 我不明白为什么说文档没有写入属性,因为我是在写入模式下打开的。我也不明白第一个错误,它无法加载文件 如果它能帮助您,则此脚本的目标是初始化程序,使用尝试。它尝试在try部分以读取模式打开文档,然后设置变量。如果文档不存在(因为程序是第一次启动的),它将进入部分,在写入

我最近用pickle的一个外部文档制作了一个程序。但是当它尝试用pickle加载文件时,我遇到了这个错误(文件已经存在,但当文件不存在时也会失败):

这里的打印显示执行了哪些行。这里的
os.system
允许写入文件,但错误仍然存在

我不明白为什么说文档没有写入属性,因为我是在写入模式下打开的。我也不明白第一个错误,它无法加载文件

如果它能帮助您,则此脚本的目标是初始化程序,使用
尝试
。它尝试在
try
部分以读取模式打开文档,然后设置变量。如果文档不存在(因为程序是第一次启动的),它将进入
部分,在写入信息之前创建文档

我希望你会有任何线索,包括改变代码的体系结构,如果你有更好的方法来进行首次启动程序的初始化

提前感谢您,如果代码格式不好,我很抱歉,我是这个网站的初学者。

引用自:

obj
的pickle表示写入打开的文件对象
file

file
参数必须具有接受单个字节参数的
write()
方法。因此,它可以是为二进制写入而打开的磁盘上文件、
io.BytesIO
实例,或满足此接口的任何其他自定义对象

因此,您应该向该函数传递一个文件对象,而不是文件名,如下所示:

with open("simple_data.dat", "wb"): as File:
   pickle.dump(tab_simple, File)

是的,在你的情况下,文件已经被打开了,所以你应该写
doc\u simple

这个。OP已打开文件,但使用文件名而不是文件处理程序
doc\u simple
import pickle5 as pickle
#import os

try:
    print("a")
    with open('simple_data.dat', 'rb') as doc_simple:
        print("b")
        tab_simple = pickle.load(doc_simple)
        print("c")
        print(tab_simple)
        print("d")
        URL = tab_simple[0]
        produit_nom = tab_simple[1]
        tous_jours = tab_simple[2]
        print("f")

except :
    print("g")
    URL = str(input("URL to follow"))
    produit_nom = str(input("Product to follow"))

    with open('simple_data.dat', 'wb+') as doc_simple:
        print("h")
        #os.system('chmod +x simple_data.dat') 
        tab_simple = []
        tab_simple.append(URL)
        tab_simple.append(produit_nom)
        tab_simple.append([])
        print(tab_simple)
        print("c'est le 2")
        print("p")
        pickle.dump(tab_simple, 'simple_data.dat')
        print("q")
pickle.dumps(obj, protocol=None, *, fix_imports=True)
with open("simple_data.dat", "wb"): as File:
   pickle.dump(tab_simple, File)