-
[Python] io.BytesIO truncate 알아보기Python 2024. 2. 22. 07:05728x90반응형
- 목차
들어가며.
이번 글에서는 파이썬의 io 모듈의 BytesIO 에 대해서 알아봅니다.
특히, BytesIO 로 생성된 ByteBuffer 의 truncate 기능에 대해서 자세히 알아보려고 합니다.
파이썬의 io 모듈은 StringIO 와 BytesIO 객체를 제공합니다.
이들은 메모리 상에 저장된 문자 정보를 마치 파일을 다루는 듯한 API 를 제공합니다.
그래서 read, seek, truncate 등의 File Read, Write API 를 사용할 수 있습니다.
하지만 이들이 저장하고 관리하는 실질적인 데이터를 동일합니다.
아래의 예시처럼 이들은 "모든 소문자 알파벳들"을 저장할 뿐이며, 제공되는 API 가 다르죠.
data: str = "abcdefghijklmnopqrstuvwxyz" print(f"str : {data}") import io buf: io.StringIO = io.StringIO("abcdefghijklmnopqrstuvwxyz") print(f"buf : {buf.read(100)}")
< 출력 >
str : abcdefghijklmnopqrstuvwxyz buf : abcdefghijklmnopqrstuvwxyz
truncate.
BytesIO 는 아래와 같은 방식으로 생성됩니다.
특히, tell 함수를 통해서 탐색 중인 Position 을 확인할 수 있구요.
getbuffer().nbytes 를 통해서 전체 Bytes 사이즈를 알 수 있죠.
import io buf = io.BytesIO(b"abcdefghijklmnopqrstuvwxyz") print(f" current position : {buf.tell()} ") print(f" size : {buf.getbuffer().nbytes} ")
current position : 0 size : 26
이 상황에서 truncate 를 실행하게되면 BytesIO 의 사이즈를 0 이 됩니다.
buf.truncate(0) print(f" current position : {buf.tell()} ") print(f" size : {buf.getbuffer().nbytes} ")
current position : 0 size : 0
read 이후에 truncate.
이번에는 BytesIO 를 몇차례 read 한 이후에 truncate 를 수행합니다.
read 함수로 BytesIO 의 Byte 를 읽어들이게 되면, Position 이 변하게 됩니다.
import io buf = io.BytesIO(b"abcdefghijklmnopqrstuvwxyz") print(buf.read(1)) print(f" current position : {buf.tell()} ") print(buf.read(1)) print(f" current position : {buf.tell()} ") print(buf.read(1)) print(f" current position : {buf.tell()} ")
b'a' current position : 1 b'b' current position : 2 b'c' current position : 3
그 이후에 truncate 를 수행하게 되면 BytesIO 의 사이즈를 0 으로 리셋되지만,
Position 은 여전히 3 으로 머물게 됩니다.
buf.truncate(0) print(f" current position : {buf.tell()} ") print(f" size : {buf.getbuffer().nbytes} ")
current position : 3 size : 0
그래서 truncate 이후에는 "buf.seek(0)" 를 통해서 current position 을 초기화시켜주는 작업이 마무리되어야 합니다.
buf.seek(0)
반응형'Python' 카테고리의 다른 글
[Numpy] Boolean Indexing 알아보기 ( Boolean Mask ) (0) 2024.03.09 [Python] threading Condition 알아보기 ( wait, notify ) (0) 2024.03.09 [Pandas] Series CRUD 알아보기 (0) 2024.02.21 [python] datetime 여러 활용법 알아보기 ( datetime, timezone, truncate) (0) 2024.01.10 Seaborn heatmap 그리기 (0) 2024.01.07