我有大约350000个单列csv文件,基本上是200 - 2000个数字一个在另一个下打印。数字格式如下:“ - 1.32%”(无引号)。我想合并文件来创建一个csv文件的怪物,其中每个文件都是一个单独的列。合并的文件最多有2000行(每列可能有不同的长度)和350000列。
我想用MySQL做这件事但是有30000列的限制。 awk或sed脚本可以完成这项工作,但我不太了解它们,我担心这需要很长时间。如果解决方案需要,我可以使用服务器。有什么建议吗?
答案 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()
来获取名称或所有文件,并多次调用此脚本。