3 回答
TA贡献1821条经验 获得超6个赞
我不赞成使用这样的代码,相反,我会敦促你用你试图解决的实际问题来更新问题,而不是有可能在读写模式下打开一个泡菜对象。将其包装在尝试中的原因除外,这是在泡菜文件不存在时第一次运行,因此我们将创建它。
import pickle
try:
with open("my_pickle.file", "rb+") as pickle_file:
mylist = pickle.load(pickle_file)
mylist = [i * 2 for i in mylist]
pickle_file.seek(0)
pickle.dump(mylist, pickle_file)
print(mylist)
except FileNotFoundError as fnfe:
with open("my_pickle.file", "wb") as pickle_file:
pickle.dump([1, 2, 3], pickle_file)
运行此脚本 5 次,第一次创建腌制对象,接下来 4 次,它将使列表中的值加倍
输出
[1, 2, 3]
[2, 4, 6]
[4, 8, 12]
[8, 16, 24]
[16, 32, 48]
但同样,这不是我会推荐的东西。相反,如果您使用实际代码和问题更新问题,则可能有更好的方法来解决此问题并获得其他答案。
TA贡献1909条经验 获得超7个赞
不可能。
为此,请打开 2 个文件指针,一个用于读取,另一个用于写入。对于写入指针,将其命名为“文件.tmp”或其他名称。写入此文件后,可以将另一个文件替换为新文件。伪代码是:file.tmp
f1 = open('hello.txt', 'r')
f2 = open('hello.txt.tmp', 'w')
f1_contents = f1.read()
# do something with f1_contents
f2.write(f1_contents)
f1.close(); f2.close()
import os
os.rename('hello.txt.tmp', 'hello.txt')
TA贡献1871条经验 获得超13个赞
您应该更多地了解您想要实现的目标。
正确读取包含多个对象的泡菜文件会很棘手 - 您必须在对象的开头和结尾处保留一个带有索引的侧结构。
总而言之,使用sqlite3更容易,用它创建一个数据库文件,其中包含一个表(将其命名为“泡菜”),该表可能只包含两列:一个用于腌制对象的ID,以及序列化对象本身。
添加回答
举报