在clojure中将一个非常大的文件(比如每行一个有10万个名字的文本文件)读入一个列表(懒惰地 - 根据需要加载它)的最佳方法是什么?
基本上我需要对这些项进行各种字符串搜索(我现在用shell脚本中的grep和reg ex做).
我尝试在结尾添加'(在开头和结尾),但显然这个方法(加载一个静态?/常量列表,由于某种原因有一个大小限制.
到目前为止,我有:
(:require [clojure-csv.core :as csv])
(:require [clojure.java.io :as io]))
(def csv-file (.getFile (clojure.java.io/resource "verbs.csv")))
(defn process-csv [file]
(with-open [rdr (io/reader file)]
(csv/parse-csv rdr)))
Run Code Online (Sandbox Code Playgroud)
但我得到了java.io.IOException: Stream closed.我正在使用clojure-csv,它暴露了两种方法,我使用的第一种方法,parse-csv文档说:
Takes a CSV as a char sequence or string, and returns a lazy sequence of vectors of strings
Run Code Online (Sandbox Code Playgroud)
我想我知道的with-open是:懒惰,并且rdrin (csv/parse-csv rdr)))是csv文件的单行吗?
PS.我也想搜索文件,重复打开文件是否很昂贵(即使它是懒惰地阅读)并搜索整个内容?