Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬 피클링

<시간/>

파이썬 피클 모듈은 파이썬 객체 구조를 직렬화 및 역직렬화하는 데 사용됩니다. 모든 종류의 파이썬 객체(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:파일의 끝이 감지되면 이 예외가 발생합니다.

장점:

  • 복잡한 데이터를 저장할 때 편리합니다.

  • 사용하기 쉽고 가벼우며 여러 줄의 코드가 필요하지 않습니다.

  • 생성된 절인 파일은 쉽게 읽을 수 없으므로 어느 정도 보안을 제공합니다.

단점:

  • 파이썬 이외의 언어는 절인 파이썬 개체를 재구성하지 못할 수 있습니다.

  • 악의적인 소스에서 데이터를 추출할 위험이 있습니다.