如何在GO语言中将大型csv文件拆分为多个文件?

时间:2014-10-20 04:15:43

标签: algorithm csv go

我是Go lang程序员的新手,试图学习Go lang功能。我想将一个大的csv文件拆分成GO lang中的多个文件,每个文件包含标题。我该怎么做?我到处搜索但无法得到正确的解决方案。在这方面的任何帮助将不胜感激。 另请给我一本好书以供参考。

感谢你

2 个答案:

答案 0 :(得分:2)

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

让我们思考这个问题。

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

如果它很小我通常会使用它:

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

但是,这个包也存在:

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

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

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

然后我们想要按照其中的所有换行符拆分文件正文。

您可以使用它来执行此操作:

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

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

一般情况下,它不会是文件计数,但如果我们假装它,我们只想将行数除以预期的文件数来给出行/文件。

现在我们可以使用适当大小的切片并通过以下方式将文件写回:

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

我用某个时间帮助我认为扔掉这些东西的技巧就是写下我们的使命宣言。

"我想在go"

中将一个大的csv文件拆分成多个文件

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

此外 - 在您可以轻松编写真实代码本身之前,请务必使用伪代码。有时,只需编写一个简短的注释,内联您认为代码应该如何流动,然后将其缩小到可以编码和工作的最小部分。

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

另外,我知道我会抓住一些仇恨 - 但至于书籍 - imo - 你只会通过努力让事情变得更有效而不是阅读来学习。行动总是胜过被动。不要害怕失败。

答案 1 :(得分:0)

这里a package可能会有所帮助。您可以设置必要的块大小(以字节为单位),然后将文件分割成适当数量的块。