2013-07-17 100 views
1

我有大約350000個一列csv文件,其實質上是200 - 2000個數字打印在另一個之下。數字格式如下:「-1.32%」(不含引號)。我想合併這些文件來創建一個csv文件的怪物,其中每個文件都是一個單獨的列。合併的文件最多有2000行(每列可能有不同的長度)和350000列。通過合併較小的csv文件創建一個350000列csv文件

我想到用MySQL做它,但有一個30000列限制。 awk或sed腳本可以完成這項工作,但我不太瞭解它們,恐怕這需要很長時間。如果解決方案需要,我可以使用服務器。有什麼建議麼?

+0

你如何匹配行?或者他們都只是從頂部開始? –

+0

'cat file1 file2 ...> hugeFile'怎麼樣? – fedorqui

+0

Powershell可能很容易做到這一點 – JNK

回答

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文件,它會打印一個新的文件到標準輸出。

請注意,您不能一次合併所有文件;例如,您不能將350,000個文件名作爲參數傳遞給進程,其次,進程只能同時打開1024個文件。

所以你必須通過幾次。即合併文件1-1000,然後合併1001-2000等。然後,您應該能夠一次合併350個生成的中間文件。

或者您可以編寫一個包裝腳本,它使用os.listdir()來獲取名稱或所有文件並多次調用此腳本。

+0

我在java中製作了類似的程序。謝謝 – rwms

相關問題