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

파이썬 바이너리 데이터 서비스

<시간/>

Python 라이브러리의 struct 모듈 조항은 C 유형 구조체와 Python 바이트열 객체 간의 변환을 수행하는 데 유용합니다. 이는 struct 모듈에 정의된 Struct 클래스 및 해당 메서드뿐만 아니라 모듈 수준 함수에 의해 달성될 수 있습니다.

변환 함수는 형식 문자열을 사용합니다. 형식 문자열에 사용되는 바이트 순서, 크기 및 정렬은 다음 표에 따라 형식 지정 문자에 따라 결정됩니다.

<머리><스타일="텍스트 정렬:중심;" width="62">문자
바이트 순서
크기
정렬
@
네이티브
네이티브
네이티브
=
네이티브
표준
없음
<
리틀 엔디안
표준
없음
>
빅 엔디안
표준
없음
!
네트워크(=빅엔디안)
표준
없음

다음 표는 C 유형 변수와 해당 Python 유형을 나타내는 데 사용되는 형식 문자를 보여줍니다.

<머리><스타일="텍스트 정렬:중심;" 너비="47">형식
C 유형
파이썬 유형
x
패드 바이트
값 없음
c
문자
길이가 1인 바이트
b/B
서명/서명되지 않은 문자
정수
?
_Bool
부울
h/H
짧은/부호 없는 짧은
정수
나/나
int/unsigned int
정수
l/L
long/unsigned long
정수
f
플로트
플로트
d
더블
플로트
s
문자[]
바이트
p
문자[]
바이트
P
무효 *
정수

다음 함수는 struct 모듈에 정의되어 있습니다.

팩()

이 함수는 형식 문자열 형식에 따라 압축된 값을 포함하는 바이트열 객체를 반환합니다. 형식 지정 문자는 형식에 필요한 값과 일치해야 합니다.

풀기()

이 함수는 형식 문자열 형식에 따라 버퍼에서 압축을 풉니다. 결과는 정확히 하나의 항목을 포함하더라도 튜플입니다.

다음 코드는 이러한 함수의 사용을 보여줍니다.

import struct
student=(1, b'Rahul', 65.75)
packed=struct.pack('I 5s f', *student)
print ('packed data:',packed)

unpacked=struct.unpack('I 5s f', packed)
print ('unpacked data:',unpacked)

출력

packed data: b'\x01\x00\x00\x00Rahul\x00\x00\x00\x00\x80\x83B'
unpacked data: (1, b'Rahul', 65.75)

Struct 클래스의 메소드를 사용하여 패킹/언패킹을 수행할 수도 있습니다. Struct 개체를 한 번 만들고 해당 메서드를 호출하는 것이 형식 문자열을 한 번만 컴파일하면 되므로 동일한 형식으로 구조체 함수를 호출하는 것보다 더 효율적입니다.

구조체(형식)

이 생성자는 형식 문자열 형식에 따라 이진 데이터를 쓰고 읽는 새 Struct 개체를 반환합니다.

팩()

이 메서드는 컴파일된 형식을 사용하는 pack() 함수와 동일합니다.

풀기()

이 메서드는 컴파일된 형식을 사용하는 unpack() 함수와 동일합니다.

다음 예제는 Struct 클래스를 사용하여 Python 데이터를 압축 및 압축 해제하는 방법을 보여줍니다.

s = struct.Struct('I 5s f')
packed=s.pack(*student)
print (packed)
unpacked = s.unpack(packed)
print (unpacked)

압축된 데이터는 명명된 튜플 개체로 직접 구문 분석될 수 있습니다.

from collections import namedtuple
newstudent = namedtuple('newstudent','No Name Marks')
s1 = newstudent._make(struct.unpack('I 5s f', packed))
print (s1)

출력

newstudent(No=1, Name=b'Rahul', Marks=65.75)