创建1个文件并使用库(如python)

时间:2016-04-24 18:02:30

标签: clojure leiningen

我正在学习clojure,我想将它用于一些简单的事情,就像我使用python一样。

例如,我想在一个充满CSV文件的目录中创建一个.clj文件,然后用一些CSV库将它们稍微晃一下,而不用整个项目。

在python中我创建一个.py文件,顶部只有import csv。我可以在clojure中这样做吗?

如果没有,那么做一个像这样的小脚本最简单的方法是什么?

到目前为止,我发现的一切都说我需要一个新的lein项目来对这样的库做任何事情。

2 个答案:

答案 0 :(得分:4)

使用boot构建工具

您可以将boot用于此目的。它是一个构建工具,允许您编写执行任务的standalone scripts(因此它不必包含所有项目结构)。在脚本中,您可以指定所需的所有依赖项,使用其他任务或定义您的任务。只需安装boot并编写脚本即可。

例如,要创建一个小脚本来读取命令行中提供的CSV文件,您可以编写以下内容(例如read-csv.boot):

#!/usr/bin/env boot

(set-env! :dependencies '[[org.clojure/data.csv "0.1.3"]])

(require '[boot.cli :refer [defclifn]]
         '[clojure.data.csv :as csv]
         '[clojure.java.io :as io])

(defclifn -main
  [f file FILE str "input CSV file"]
  (println "Reading" file)
  (with-open [in-file (io/reader file)]
    (->> in-file
      (csv/read-csv)
      (println))))

使其可执行:

$ chmod +x read-csv.boot

并使用它:

$ ./read-csv.boot -f input.csv
Reading input.csv
([1 2 3])

python

的比较

在Clojure(和Java)中,依赖关系管理与Python有点不同。在Python中,库作为全局包安装在系统中,默认情况下安装了许多库。您还可以使用pip等工具,以便全局安装其他软件包。 Clojure和Java通常在您的项目中使用Maven依赖项(并且不安装它们并使其全局可用),这需要诸如构建工具之类的工具(例如mavenivylein或{{ 1}})设置应用程序类路径。

答案 1 :(得分:2)

看看inlein,这看起来非常整洁:

#!/usr/bin/env inlein

'{:dependencies [[org.clojure/clojure "1.8.0"]
                 [clojure-csv/clojure-csv "2.0.1"]]}

(require '[clojure-csv.core :as csv])

(println "Reading: " (first *command-line-args*))

(-> *command-line-args*
    first
    slurp
    csv/parse-csv
    println)

(System/exit 0)

由于启动了后台守护进程,它的启动时间也令人印象深刻。