泡菜问题 python
Problems with pickle python
我最近用 pickle 使用外部文档制作了一个程序。但是当它试图用泡菜加载文件时,我得到了这个错误(文件已经存在但是当文件不存在时它也会失败):
python3.6 check-graph_amazon.py
a
b
g
URL to follow www.amazon.com
Product to follow Pool_table
h
i
[' www.amazon.com', ' Pool_table', []]
p
Traceback (most recent call last):
File "check-graph_amazon.py", line 17, in <module>
tab_simple = pickle.load(doc_simple)
io.UnsupportedOperation: read
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "check-graph_amazon.py", line 42, in <module>
pickle.dump(tab_simple, 'simple_data.dat')
TypeError: file must have a 'write' attribute
这是代码:
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")
这里的打印是为了显示执行了哪些行。 os.system
允许写入文件,但错误仍然存在。
我不明白为什么说文档没有写入属性,因为我是用写入模式打开的。我也不明白第一个无法加载文件的错误。
如果对您有帮助的话,这个脚本的目标是初始化程序,带有try
。它尝试在 try
部分以阅读模式打开文档,然后设置变量。如果文档不存在(因为程序是第一次启动),它会进入 except
部分并创建文档,然后再在上面写入信息。
如果您有更好的方法在程序第一次启动时进行初始化,我希望您能得到任何线索,包括更改代码的体系结构。
提前致谢,如果代码格式不正确,我深表歉意,我是这个网站的新手。
pickle.dumps(obj, protocol=None, *, fix_imports=True)
Write a pickled representation of obj
to the open file object file
. ...
...
The file
argument must have a write()
method that accepts a single bytes argument. It can thus be an on-disk file opened for binary writing, an io.BytesIO
instance, or any other custom object that meets this interface.
因此,您应该向此函数传递一个 文件对象,而不是文件名,如下所示:
with open("simple_data.dat", "wb"): as File:
pickle.dump(tab_simple, File)
是的,在你的情况下文件已经打开,所以你应该写信给 doc_simple
。
我最近用 pickle 使用外部文档制作了一个程序。但是当它试图用泡菜加载文件时,我得到了这个错误(文件已经存在但是当文件不存在时它也会失败):
python3.6 check-graph_amazon.py
a
b
g
URL to follow www.amazon.com
Product to follow Pool_table
h
i
[' www.amazon.com', ' Pool_table', []]
p
Traceback (most recent call last):
File "check-graph_amazon.py", line 17, in <module>
tab_simple = pickle.load(doc_simple)
io.UnsupportedOperation: read
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "check-graph_amazon.py", line 42, in <module>
pickle.dump(tab_simple, 'simple_data.dat')
TypeError: file must have a 'write' attribute
这是代码:
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")
这里的打印是为了显示执行了哪些行。 os.system
允许写入文件,但错误仍然存在。
我不明白为什么说文档没有写入属性,因为我是用写入模式打开的。我也不明白第一个无法加载文件的错误。
如果对您有帮助的话,这个脚本的目标是初始化程序,带有try
。它尝试在 try
部分以阅读模式打开文档,然后设置变量。如果文档不存在(因为程序是第一次启动),它会进入 except
部分并创建文档,然后再在上面写入信息。
如果您有更好的方法在程序第一次启动时进行初始化,我希望您能得到任何线索,包括更改代码的体系结构。
提前致谢,如果代码格式不正确,我深表歉意,我是这个网站的新手。
pickle.dumps(obj, protocol=None, *, fix_imports=True)
Write a pickled representation of
obj
to the open file objectfile
. ......
The
file
argument must have awrite()
method that accepts a single bytes argument. It can thus be an on-disk file opened for binary writing, anio.BytesIO
instance, or any other custom object that meets this interface.
因此,您应该向此函数传递一个 文件对象,而不是文件名,如下所示:
with open("simple_data.dat", "wb"): as File:
pickle.dump(tab_simple, File)
是的,在你的情况下文件已经打开,所以你应该写信给 doc_simple
。