通过合并较小的csv文件创建350000列csv文件

时间:2013-07-17 12:20:19

标签: sql csv unix large-data-volumes large-data


我有大约350000个单列csv文件,基本上是200 - 2000个数字一个在另一个下打印。数字格式如下:“ - 1.32%”(无引号)。我想合并文件来创建一个csv文件的怪物,其中每个文件都是一个单独的列。合并的文件最多有2000行(每列可能有不同的长度)和350000列。

我想用MySQL做这件事但是有30000列的限制。 awk或sed脚本可以完成这项工作,但我不太了解它们,我担心这需要很长时间。如果解决方案需要,我可以使用服务器。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

这个python脚本会做你想要的:

#!/usr/bin/env python2

import os
import sys
import codecs

fhs = []
count = 0
for filename in sys.argv[1:]:
    fhs.append(codecs.open(filename,'r','utf-8'))
    count += 1

while count > 0:
    delim = ''
    for fh in fhs:
        line = fh.readline()
        if not line:
            count -= 1
            line = ''

        sys.stdout.write(delim)
        delim = ','
        sys.stdout.write(line.rstrip())
    sys.stdout.write('\n')

for fh in fhs:
    fh.close()

使用要合并的所有CSV文件调用它,它会将新文件打印到stdout。

请注意,您无法一次合并所有文件;例如,你不能将350,000个文件名作为参数传递给进程;其次,进程一次只能打开1024个文件。

所以你必须在几次传球中做到这一点。即合并文件1-1000,然后1001-2000等。然后你应该能够一次合并350个结果中间文件。

或者您可以编写一个包装脚本,该脚本使用os.listdir()来获取名称或所有文件,并多次调用此脚本。