Clojure使用data.csv库如何实现数据追加写入CSV新行
Clojure data.csv 追加写入实现方法
write-csv本身不负责控制文件的写入模式,它的作用只是把传入的数据集按CSV格式写到你给定的writer流里。你现在每次写入都会覆盖原文件,问题出在创建writer的步骤:clojure.java.io/writer默认打开文件时会截断原有内容,走覆盖写入逻辑,要追加内容只需要在创建writer时打开追加开关即可。
修改后的可运行代码:
(require '[clojure.java.io :as io] '[clojure.data.csv :as csv]) (defn append-to-csv [file-path name] (with-open [writer (io/writer file-path :append true)] (csv/write-csv writer [[name 2]])))
踩坑提醒
- 第一次生成CSV文件时如果需要写表头,不要开追加模式,单独调用一次写入逻辑写表头就行,后续新增行再用上面的追加方法。
- 如果没法保证待追加的原CSV文件末尾自带换行,建议在写CSV内容前先往流里写一个换行符,避免新写入的行直接粘在原文件最后一行末尾导致格式错误,写法如下:
(defn append-to-csv [file-path name] (with-open [writer (io/writer file-path :append true)] (.write writer (int \newline)) (csv/write-csv writer [[name 2]])))
write-csv支持的:newline参数只控制生成CSV时用LF(Unix风格换行)还是CR+LF(Windows风格换行),和追加写入逻辑没有关系,不要在这里找配置项。
内容的提问来源于stack exchange,提问作者Vinn
相关产品推荐
相关产品推荐

