Clojure 如何逐行写入EDN?(spit,散列图序列)

Clojure 如何逐行写入EDN?(spit,散列图序列),clojure,writefile,line-by-line,Clojure,Writefile,Line By Line,我有这样的数据 tab = ({"123" data} {"456" data} ... {"123" data}{"456" data} (不管怎样,这是一个懒散的hashmaps序列) 我想把它逐行写入edn文件,所以我这样做了 (map (fn[x] (spit "test.edn" x :append true)) tab) 问题是,我希望在文件中包含以下内容: {"123" data} {"456" data} 但它似乎是这样附加的 tab = ({"123" data} {

我有这样的数据

tab = ({"123" data} {"456" data} ... 
{"123" data}{"456" data}
(不管怎样,这是一个懒散的hashmaps序列)

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

(map (fn[x] (spit "test.edn" x :append true)) tab)
问题是,我希望在文件中包含以下内容:

{"123" data}
{"456" data}
但它似乎是这样附加的

tab = ({"123" data} {"456" data} ... 
{"123" data}{"456" data}
有办法解决这个问题吗? 我想我必须添加“换行符”,但我不知道怎么做,因为输入不是字符串


谢谢

对不起,我终于找到了,希望它能帮助一些人,因为我没有在网上找到它(我的意思是没有简单的答案)


下午好。

对不起,我终于找到了,希望它能帮助一些人,因为我没有在网上找到它(我的意思是没有简单的答案)

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

(doseq [x tab]
  (spit "test.edn" (prn-str x) :append true))
因此,对于
选项卡
中的每个项目,将其转换为可读字符串,后跟换行符,然后将该字符串附加到
test.edn

出于以下几个原因,您不应为此使用
map

  • map
    是惰性的,因此除非强制执行,否则不会打印整个序列
  • map
    保留序列的头部,这只会在此处浪费内存
  • 因此,对于
    选项卡
    中的每个项目,将其转换为可读字符串,后跟换行符,然后将该字符串附加到
    test.edn

    出于以下几个原因,您不应为此使用
    map

  • map
    是惰性的,因此除非强制执行,否则不会打印整个序列
  • map
    保留序列的头部,这只会在此处浪费内存

  • 您应该使用
    pr str
    ,而不仅仅是
    str
    。例如,它可以与
    nil
    正常工作。doseq更好,因为spit是一种副作用功能。您应该使用
    pr str
    ,而不仅仅是
    str
    。例如,它可以与
    nil
    正常工作。doseq更好,因为spit是一种副作用。谢谢!我还没有试过,因为我的东西正在工作,但我会看看我的最终计划何时能改进!谢谢我还没有试过,因为我的东西正在工作,但我会看看我的最终计划何时能改进!