파이썬 피클 모듈은 파이썬 객체 구조를 직렬화 및 역직렬화하는 데 사용됩니다. 모든 종류의 파이썬 객체(list, dict 등)를 바이트 스트림(0 및 1)으로 변환하는 프로세스를 산세 또는 직렬화 또는 병합 또는 마샬링이라고 합니다. (피클링을 통해 생성된) 바이트 스트림을 언피클링이라고 하는 프로세스를 통해 파이썬 객체로 다시 변환할 수 있습니다.
Pickle을 선택해야 하는 이유:실제 시나리오에서 pickling 및 unpickling을 사용하면 한 서버/시스템에서 다른 서버/시스템으로 데이터를 쉽게 전송한 다음 파일이나 데이터베이스에 저장할 수 있으므로 널리 사용됩니다.
주의 사항:신뢰할 수 없는 출처에서 받은 데이터는 보안 위협이 될 수 있으므로 피클 해제하지 않는 것이 좋습니다. 하지만, pickle 모듈은 악성 데이터를 피클링하는 동안 알거나 경보를 발령할 방법이 없습니다.
pickle 모듈을 가져온 후에만 pickling 및 unpickling을 수행할 수 있습니다. 다음 명령을 사용하여 피클 가져오기를 수행할 수 있습니다. -
import pickle
피클 예시:
다음은 목록을 피클하는 방법에 대한 간단한 프로그램입니다.
간단한 목록 피클 :Pickle_list1.py
import pickle mylist = ['a', 'b', 'c', 'd'] with open('datafile.txt', 'wb') as fh: pickle.dump(mylist, fh)
위의 코드에서 list – "mylist"는 4개의 요소('a', 'b', 'c', 'd')를 포함합니다. 모든 작업이 현재 작업 디렉토리의 바이트를 사용하여 수행되므로 "w" 대신 "wb" 모드에서 파일을 엽니다. mylist 데이터를 바이트 스트림으로 변환하는 "datafile.txt"라는 새 파일이 생성됩니다.
간단한 목록 선택 해제 :unpickle_list1.py
import pickle pickle_off = open ("datafile.txt", "rb") emp = pickle.load(pickle_off) print(emp)
출력:위의 스크립트를 실행하면 mylist 데이터를 출력으로 다시 볼 수 있습니다.
['a', 'b', 'c', 'd']
간단한 사전 피클 -
import pickle EmpID = {1:"Zack",2:"53050",3:"IT",4:"38",5:"Flipkart"} pickling_on = open("EmpID.pickle","wb") pickle.dump(EmpID, pickling_on) pickling_on.close()
사전 선택 해제 -
import pickle pickle_off = open("EmpID.pickle", 'rb') EmpID = pickle.load(pickle_off) print(EmpID)
위의 스크립트(unpickle)를 실행하면 이전에 초기화한 사전을 다시 가져옵니다. 또한 여기에서 바이트를 읽고 있기 때문에 "r" 대신 "rb"를 사용했습니다.
출력
{1: 'Zack', 2: '53050', 3: 'IT', 4: '38', 5: 'Flipkart'}
피클 예외
다음은 피클 모듈을 처리하는 동안 발생하는 일반적인 예외 중 일부입니다 -
-
Pickle.PicklingError:피클 객체가 피클링을 지원하지 않으면 이 예외가 발생합니다.
-
Pickle.UnpicklingError:파일에 잘못된 데이터 또는 손상된 데이터가 포함된 경우.
-
EOFError:파일의 끝이 감지되면 이 예외가 발생합니다.
장점:
-
복잡한 데이터를 저장할 때 편리합니다.
-
사용하기 쉽고 가벼우며 여러 줄의 코드가 필요하지 않습니다.
-
생성된 절인 파일은 쉽게 읽을 수 없으므로 어느 정도 보안을 제공합니다.
단점:
-
파이썬 이외의 언어는 절인 파이썬 개체를 재구성하지 못할 수 있습니다.
-
악의적인 소스에서 데이터를 추출할 위험이 있습니다.