Common Lisp의 Zstd 아카이브에서 라인 읽기
2813 단어 readlinezstdcommonlisp
Common Lisp의 Zstd 아카이브에서 라인 읽기
Zstd 형식으로 압축된 큰 줄 구분 JSON 파일이 있습니다. 이 파일을 data.ndjson.zst라고 부르겠습니다.
내 프로그램이 파일을 한 줄씩 읽기를 원합니다. https://github.com/glv2/cl-zstd을 사용하여 파일에서 이진 스트림을 만들 수 있습니다. 그래도 이진 스트림의 read-line 함수를 실행할 수 있습니다. 따라서 바이너리 스트림을 Flexi-stream으로 래핑해야 합니다.
(ql:quickload 'flexi-streams)
(ql:quickload 'zstd)
(defpackage #:ex1
(:use #:cl #:flexi-streams :zstd))
(in-package :ex1)
(with-open-file (f #P"data.ndjson.zst"
:element-type '(unsigned-byte 8)
:direction :input)
(with-decompressing-stream (zstd-stream f)
(let ((s (make-flexi-stream zstd-stream
:external-format (make-external-format :utf-8))))
(loop for line = (read-line s nil nil)
until (null line)
do (print line)))))
그 줄을 인쇄하는 것이 현실적인 예입니다. 따라서 (print line)을 실용적인 애플리케이션으로 대체할 수 있습니다. 예를 들어 JSON 라인을 구문 분석하고 책 제목을 추출할 수 있습니다.
Reference
이 문제에 관하여(Common Lisp의 Zstd 아카이브에서 라인 읽기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/veer66/reading-lines-from-a-zstd-archive-in-common-lisp-28c9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
(ql:quickload 'flexi-streams)
(ql:quickload 'zstd)
(defpackage #:ex1
(:use #:cl #:flexi-streams :zstd))
(in-package :ex1)
(with-open-file (f #P"data.ndjson.zst"
:element-type '(unsigned-byte 8)
:direction :input)
(with-decompressing-stream (zstd-stream f)
(let ((s (make-flexi-stream zstd-stream
:external-format (make-external-format :utf-8))))
(loop for line = (read-line s nil nil)
until (null line)
do (print line)))))
Reference
이 문제에 관하여(Common Lisp의 Zstd 아카이브에서 라인 읽기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/veer66/reading-lines-from-a-zstd-archive-in-common-lisp-28c9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)