피클을 사용할 때 정상적으로 작동하고로드가 덤프 될 수 있습니다.피클 덤프가 현재 파일 데이터를 대체합니다.
문제는 프로그램을 닫고 다시 덤프를 시도하면 기존 파일 데이터를 새 덤프로 바꿉니다.
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()
답변의 첫 번째 부분은 맞습니다 ...하지만 두 번째 부분은 올바르지 않습니다. 피클은 추가를 지원합니다. 그리고 "안전하지 않은"경우 float/str/list/dict 이외의 형식을 저장하려고하면 JSON은 확장 할 수 없으면 수행 할 수 없습니다.이 경우 피클처럼 안전하지 않게됩니다. 당신은 당신의 데이터와 당신이 그것을 어떻게 저장하길 원하는지를 알아야합니다. 그렇지 않으면 일반적인 안전 대답이 없습니다. – abarnert
아닙니다. Pickle은 본질적으로 위험합니다 (모듈의 문서가 여러 번주의를 기울이며주의를 기울임). pickle.load' *는 pickled 파일에 포함 된 임의의 코드를 실행합니다 * : http : //michael-rushanan.blogspot .ca/2012/10/why-python-pickle-is-insecure.html –
pickle이 위험한 이유를 이해하지 않으려는 경우 확장 JSON 또는 다른 방식을 사용하여 안전하지 않은 코드를 작성하게 될 것입니다. . 특히 경고 메시지는 "pickle 모듈은 잘못되었거나 악의적으로 생성 된 데이터에 대해 보안을 유지하기위한 것이 아닙니다." JSON을 확장하여 사용자 정의 클래스를 명백한 방식으로 저장하고 복원하는 경우 오류가 있거나 악의가있는 생성 된 데이터에 대해 안전하지 못합니다. – abarnert