clojure - Clojure 打开一个大的 txt 文件编辑数据并将其写入一个新文件
问题描述
我正在尝试打开一个太大而无法啜饮的文件。然后我想编辑文件以删除除数字以外的所有字符。然后将数据写入新文件。
到目前为止我有
(:require [clojure.java.io :as io])
(:require [clojure.string :as str])
:jvm-opts ["-Xmx2G"]
(with-open [rdr (io/reader "/Myfile.txt")
wrt (io/writer "/Myfile2.txt")]
(doseq [line (line-seq rdr)]
(.write wrt (str line "\n"))))
哪个读写,但我不确定进行编辑的最佳方式。非常感谢任何帮助。我对这门语言很陌生。
解决方案
看起来您只需要line
在编写之前修改该值。如果要修改字符串以删除所有非数字字符,则正则表达式是一种非常简单的方法。您可以创建一个函数来执行此操作:
(defn numbers-only [s]
(clojure.string/replace s #"[^\d]" ""))
(numbers-only "this is 4 words")
=> "4"
然后在您的示例中使用该功能:
(str (numbers-only line) "\n")
或者,您可以map
numbers-only
超过 , 的输出line-seq
,并且因为map
和line-seq
都是惰性的,您将获得相同的惰性/按需行为:
(map numbers-only (line-seq rdr))
然后你doseq
会保持不变。我可能会选择这种方法,因为它将您的“流”处理保持在一起,并且您的命令式/副作用循环只关心编写它的输入。
推荐阅读
- spring-boot - 即使我暂停消费者,Spring Kafka 也总是在 5 分钟后重新平衡
- syntax - Latex - 将限制置于积分之下和之上(而不是靠近它)
- docker - 为什么节点上的 dockerd 会变坏?
- javascript - code.org for-loop 不画线 javascript
- azure-iot-edge - 来自非 SDK 叶设备的消息体路由
- android - Android架构组件——Activity/Fragment与Service/IntentService之间的通信
- html - CSS定位按钮
- python - 我在 echo 中有一个 shell 脚本的最终结果,我想将它转换为 json 对象
- python - 在直方图 bin 上操作 Python
- python - 如何修复窗口中的 Python Pygame 图像错误