當我使用泡菜時,它工作正常,我可以轉儲任何負載。泡菜轉儲替換當前文件數據
問題是如果我關閉程序並嘗試再次轉儲,它將用新轉儲替換舊文件數據。這裏是我的代碼:
import pickle
import os
import time
dictionary = dict()
def read():
with open('test.txt', 'rb') as f:
a = pickle.load(f)
print(a)
time.sleep(2)
def dump():
chs = raw_input('name and number')
n = chs.split()
dictionary[n[0]] = n[1]
with open('test.txt', 'wb') as f:
pickle.dump(dictionary, f)
Inpt = raw_input('Option : ')
if Inpt == 'read':
read()
else:
dump()
答案的前半部分是正確的......但下半部分不是。 Pickle確實支持添加。至於「不安全」,如果你試圖保存除float/str/list/dict之外的類型,JSON不能這樣做,除非你擴展它,在這種情況下,它變得和pickle一樣不安全。你必須知道你的數據以及你想如何存儲它,或者沒有一般的安全答案。 – abarnert
編號Pickle本質上是危險的(因爲模塊的文檔需要多次注意警告),'pickle.load' *將執行包含在pickled文件中的任意代碼*:http://michael-rushanan.blogspot .ca/2012/10/why-python-pickle-is-insecure.html –
如果你甚至沒有試圖理解爲什麼pickle是危險的,你最終會寫代碼,這些代碼只是使用擴展JSON或其他方式。警告中特別提到的是「醃泡模塊不能防止錯誤或惡意構建的數據。」如果您以顯而易見的方式擴展JSON以存儲和恢復自定義類,那麼對於錯誤或惡意構造的數據而言,它將同樣不安全。 – abarnert