Streaming — 파일이 RAM 보다 클 때
디폴트 file 객체 iterator 가 한 줄씩 줘. 대부분 텍스트 로그엔 충분. 바이너리 stream 엔 f.read(chunk_size) 루프 또는 walrus 연산자. 핵심 — 10GB 파일에 인자 없는 .read() 호출 하지 마, RAM 10GB 없으면.
tempfile — scratch 공간 필요할 때
tempfile.NamedTemporaryFile() 가 시스템 temp 디렉토리에 유니크 이름 파일 + 자동 정리. tempfile.TemporaryDirectory() 가 디렉토리 + 컨텍스트 종료 시 재귀 정리. 처리 파이프라인, 테스트 fixture, path 약속 없이 디스크 공간 필요한 모든 거에 사용.
mmap — 파일을 메모리로
mmap 이 파일을 프로세스 가상 메모리에 매핑. bytearray 처럼 접근, OS 가 페이징 처리 — 실제 만진 부분만 로드. 멀티-GB 파일 random-access 읽기에 seek+read 보다 극적으로 빠름. 쓰기엔 mmap-수정이 효율적으로 flush 가능.
StringIO / BytesIO — 메모리의 파일
io 모듈 — StringIO 와 BytesIO 가 메모리 backed file 같은 객체. 테스트 (함수에 fake 파일 줌), 안 그러면 파일로 갈 출력 캡쳐, 한 번 flush 전 프로그램으로 파일 내용 빌드에 유용. 진짜 file 객체와 같은 메서드 지원.
War Story: cwkPippa 의 세션 로그가 JSONL — 줄당 하나의 JSON 객체. Append-only 디자인 = 전체 대화 절대 버퍼링 안 하고 일어나는 대로 이벤트 stream-write. 복구 코드가 줄 단위로 읽음. 맞는 일에 맞는 모양.