Python 데이터 지속성-Marshal 모듈

Python의 표준 라이브러리에있는 marshal 모듈의 객체 직렬화 기능은 pickle 모듈과 유사합니다. 그러나이 모듈은 범용 데이터에는 사용되지 않습니다. 반면에 Python 자체에서 Python 모듈 (.pyc 파일)의 컴파일 된 버전에 대한 읽기 / 쓰기 작업을 지원하기 위해 Python의 내부 개체 직렬화에 사용됩니다.

marshal 모듈에서 사용하는 데이터 형식은 Python 버전간에 호환되지 않습니다. 따라서 한 버전의 컴파일 된 Python 스크립트 (.pyc 파일)는 아마도 다른 버전에서 실행되지 않을 것입니다.

pickle 모듈과 마찬가지로 marshal 모듈은 /에서 파일로 마샬링 된 객체를 읽고 쓰기위한 load () 및 dump () 함수를 정의했습니다.

덤프()

이 함수는 지원되는 Python 객체의 바이트 표현을 파일에 씁니다. 파일 자체는 쓰기 권한이있는 이진 파일입니다.

하중()

이 함수는 바이너리 파일에서 바이트 데이터를 읽고이를 Python 객체로 변환합니다.

다음 예제는 미리 컴파일 된 Python 모듈을 저장하는 데 사용되는 Python의 코드 객체를 처리하기 위해 dump () 및 load () 함수를 사용하는 방법을 보여줍니다.

코드는 기본 제공 compile() Python 명령어를 포함하는 소스 문자열에서 코드 객체를 빌드하는 함수입니다.

compile(source, file, mode)

파일 매개 변수는 코드를 읽은 파일이어야합니다. 파일에서 읽지 않은 경우 임의의 문자열을 전달하십시오.

mode 매개 변수는 소스에 일련의 명령문이 포함 된 경우 'exec', 단일 표현식이있는 경우 'eval', 단일 대화식 명령문이 포함 된 경우 'single'입니다.

컴파일 코드 객체는 dump () 함수를 사용하여 .pyc 파일에 저장됩니다.

import marshal
script = """
a=10
b=20
print ('addition=',a+b)
"""
code = compile(script, "script", "exec")
f=open("a.pyc","wb")
marshal.dump(code, f)
f.close()

deserialize하려면 .pyc 파일의 객체가 load () 함수를 사용합니다. 코드 객체를 반환하기 때문에 다른 내장 함수 인 exec ()를 사용하여 실행할 수 있습니다.

import marshal
f=open("a.pyc","rb")
data=marshal.load(f)
exec (data)