适用于 ubuntu 的 CSV 拆分器?

适用于 ubuntu 的 CSV 拆分器?

是否有应用程序或命令可以将 csv(保留表头)拆分成更小的相等部分?

我正在尝试导入一个 36mb 的大文件,但导入器却出问题了。

以下是 Windows 应用程序的示例: http://download.fyxm.net/CSV-Splitter-33994.html

我想我可以使用 wine 来使用这个程序,但是我更喜欢 ubuntu 原生的东西。

答案1

您可以使用csvfix。

它是一个用于管理 CSV 文件的命令行工具。下载页面没有任何 Linux 二进制文件,但您可以从 makefile 编译源代码。

这里是命令列表。具体来说,该file_split命令看起来就是您想要的。

csvfix 的手册可以在这里找到这里。

答案2

所以您想要有多个文件,其中包含主文件中的部分条目,并且每个文件都包含表头?

如果这是您想要的,那么可以编写一个简单的脚本,获取第一个文件和您想要的文件数(或每个文件中的行数)并创建这些文件。

如果不需要图形化,并且您告诉我您想要设置什么参数,我可以尝试为您制作这样的脚本。


这是我的快速而肮脏的解决方案:

#!/usr/bin/python

import optparse
import sys
import os

parser = optparse.OptionParser(usage="csv-splitter infile", description="Takes a CSV file and splits it into smaller files. The header of the infile is written to each file.")
parser.add_option("-p", "--parts", dest="parts", type="int", default=3, help="number of resulting files")

(options, args) = parser.parse_args()
del parser

infile = args[0]

lines = 0

if not os.path.exists(infile):
    print "file does not exist"
    sys.exit(1)

print "counting lines ..."
with open(infile) as h:
    for line in h:
        lines += 1

lines_per_file = lines/options.parts
print "found %d lines, that makes %d lines per file" % (lines, lines_per_file)

with open(infile) as h:
    header = h.readline()
    read = h.readline()
    for filenumber in xrange(options.parts):
        written_lines = 0
        print "writing to file %d of %d ..." % (filenumber+1, options.parts)
        with open(infile+"-part-"+str(filenumber)+".csv", "w") as outfile:
            outfile.write(header)
            while read != '' and (written_lines <= lines_per_file or filenumber+1 == options.parts):
                outfile.write(read)
                written_lines += 1
                read = h.readline()

print "done"

答案3

我还制作了一个在线版本,允许按行、文件大小或文件数量进行拆分。它非常直观且用户友好。

CSV 实时拆分器

答案4

我制作了一个,因为我想要一个可以在我的 Mac 上使用的在线版本。

查看

相关内容