Python의 바이너리 버퍼
Python에서는 문자 데이터에 대한 파일 유사 버퍼로 StringIO 를 사용할 수 있습니다 . 메모리 매핑 파일은 기본적으로 이진 데이터에 대해 유사한 작업을 수행하지만 기본으로 사용되는 파일이 필요합니다. 파이썬은 바이너리 데이터를위한 파일 객체를 가지고 있고 자바의 ByteArrayOutputStream 과 동등한 메모리 전용 입니까?
내가 가진 사용 사례는 메모리에 ZIP 파일을 만들고 싶습니다. ZipFile 에는 파일과 같은 객체가 필요합니다.
아마도 io.BytesIO 클래스를 찾고있을 것입니다 . 바이너리 데이터를 지원한다는 점을 제외하면 StringIO와 똑같이 작동합니다.
from io import BytesIO
bio = BytesIO(b"some initial binary data: \x00\x01")
StringIO는 TypeError를 발생시킵니다.
from io import StringIO
sio = StringIO(b"some initial binary data: \x00\x01")
유니 코드 데이터를 입력하지 않고 StringIO
사용하지 않도록주의하는 한 cStringIO
괜찮습니다.
StringIO 문서 에 따르면 유니 코드 또는 8 비트를 유지하는 한 모든 것이 예상대로 작동합니다. 아마도 StringIO
누군가가 f.write(u"asdf")
(내가 아는 한 ZipFile 이하 지 않는)을 할 때 특별한 일을 할 것 입니다. 어쨌든;
import zipfile
import StringIO
s = StringIO.StringIO()
z = zipfile.ZipFile(s, "w")
z.write("test.txt")
z.close()
f = file("x.zip", "w")
f.write(s.getvalue())
s.close()
f.close()
예상대로 작동하며 결과 아카이브의 파일과 원본 파일간에 차이가 없습니다.
이 접근 방식이 작동하지 않는 특정 사례를 알고 있다면 그것에 대해 가장 관심이 있습니다. :)
구조체 패키지 https://docs.python.org/library/struct.html 을 살펴보면 문자열을 압축 된 바이너리 데이터로 해석 할 수 있습니다.
이것이 귀하의 질문에 완전히 대답하는지 확실하지 않지만 struct.unpack ()을 사용하여 바이너리 데이터를 python 객체로 변환 할 수 있습니다.
import struct
f = open(filename, "rb")
s = f.read(8)
x, y = struct.unpack(">hl", s)
이 예제에서 ">"는 big-endian을 읽으라고 "h"는 2 바이트 short를 읽고 "l"은 4 바이트 길이를 나타냅니다. 이진 데이터에서 읽을 필요가있는 것으로 분명히 변경할 수 있습니다.
참조 URL : https://stackoverflow.com/questions/25116/binary-buffer-in-python
'Programing' 카테고리의 다른 글
중첩 된 약속은 node.js에서 정상입니까? (0) | 2020.12.24 |
---|---|
조건부 생성기 표현식의 예상치 못한 동작 (0) | 2020.12.24 |
클래스 클래스 [B는 Java에서 무엇을 나타 냅니까? (0) | 2020.12.24 |
XPath : 특정 이름이 *없는 * 하위 요소 선택 (0) | 2020.12.24 |
닫힌 (원형) ListView를 만드는 방법은 무엇입니까? (0) | 2020.12.24 |