如何逐行编写EDN? (spit,seq of hashmaps)

时间:2016-02-18 11:41:32

标签: clojure writefile line-by-line

我有类似的数据

tab = ({"123" data} {"456" data} ... 

(无论如何,它是一个懒惰的哈希映射序列)。

我想逐行将它写入edn文件,所以我这样做了

(map (fn[x] (spit "test.edn" x :append true)) tab)

问题是我希望在文件中有这个:

{"123" data}
{"456" data}

但似乎这样追加

{"123" data}{"456" data}

有没有办法解决这个问题? 我想我必须添加“换行符”,但我不知道该怎么做,因为输入不是字符串。

谢谢!

2 个答案:

答案 0 :(得分:1)

抱歉,我终于找到了它,希望它会帮助一些人,我没有在互联网上找到它(我的意思是没有简单的答案)。

(map (fn[x] (spit "test.edn" (str x "\n") :append true)) tab)

下午好。

答案 1 :(得分:1)

(doseq [x tab]
  (spit "test.edn" (prn-str x) :append true))

因此,对于tab中的每个项目,将其转换为可读字符串后跟换行符,然后将该字符串追加到test.edn

出于以下原因,您不应使用map

  1. map是懒惰的,因此除非你强迫它,否则不会打印整个序列
  2. map保留序列的头部,这只会浪费内存