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,以及序列化對象本身。
添加回答
舉報