algorithm - 如何在 GO lang 中将一个大的 csv 文件拆分成多个文件?

标签 algorithm csv go

我是一个 Go lang 程序员新手,想学习 Go lang 的特性。我想在 GO lang 中将一个大的 csv 文件拆分成多个文件,每个文件包含标题。我该怎么做?我到处搜索但找不到正确的解决方案。在这方面的任何帮助将不胜感激。 也请推荐一本好书给我引用。

谢谢你

最佳答案

根据您的 shell fu,这个问题可能更适合常见的 shell 实用程序,但您特别提到了 go。

让我们仔细想想这个问题。

这个 csv 文件有多大?我们说的是 100 行还是 5G?

如果它很小,我通常使用这个:

http://golang.org/pkg/io/ioutil/#ReadFile

但是,这个包也存在:

http://golang.org/pkg/encoding/csv/

无论如何 - 让我们回到问题的抽象。您有一个标题(第一行),然后是文档的其余部分。

所以我们可能想要做的(如果暂时忽略 csv)是读入我们的文件。

然后我们要将文件主体按其中的所有换行符拆分。

您可以使用它来做到这一点:

http://golang.org/pkg/strings/#Split

您没有提到,但您知道要拆分多少个文件,或者您更愿意按行数还是字节数拆分?这里的实际限制是什么?

通常它不会是文件数,但如果我们假装它是我们只是想用我们的行数除以我们预期的文件数来得到行数/文件。

现在我们可以获取适当大小的 slice 并通过以下方式写回文件:

http://golang.org/pkg/io/ioutil/#WriteFile

有时我用来帮助认为我扔了这些东西的一个技巧是写下我们的使命声明。

“我想在 go 中将一个大的 csv 文件拆分成多个文件”

然后我开始将其分解,但采用分而治之的方法 - 不要试图一次性解决整个问题 - 只需将其分解到您可以考虑的地方。

此外 - 无偿使用伪代码,直到您可以轻松地编写真正的代码本身。有时,只写一个简短的注释内联您认为代码应该如何流动,然后将其缩小到您可以编写代码并从那里开始工作的最小部分,这会有所帮助。

顺便说一句 - 许多 golang.org 包都有示例链接,您可以在其中直接在浏览器中运行示例代码并将其剪切/粘贴到您自己的本地环境中。

另外,我知道我会因此招惹一些讨厌的人 - 但至于书本 - 我是 - 你会通过尝试让事情发挥作用而不是阅读来更快地学习。行动永远胜过被动。不要害怕失败。

关于algorithm - 如何在 GO lang 中将一个大的 csv 文件拆分成多个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26458498/

相关文章:

c - 如何显示合并排序的时间性能?

python - append Python的内存效率.txt

python - 在 csv python 中查找元素的最佳方法

go - 类型错误返回 grpc tls 凭据的接口(interface)

go - 如何禁用Golang中的双重转义URL?

java - 使用堆栈查找二叉搜索树的每个藤蔓的所有节点的非递归方法

C:排序的输入序列

algorithm - f1(n)/f2(n) 的时间复杂度

Java - 读取巨大的 csv 文件时出现 OutofMemoryError

go - 如何检查错误是否为 "deadline exceeded"错误?