1

私は約 350000 の 1 列の csv ファイルを持っています。これは基本的に 200 から 2000 の数字が上下に印刷されています。数値は次のようにフォーマットされます: "-1.32%" (引用符なし)。ファイルをマージして、各ファイルが個別の列である csv ファイルのモンスターを作成したいと考えています。マージされたファイルには、最大 2000 行 (各列の長さは異なる場合があります) と 350000 列が含まれます。

MySQLでやろうと思ったのですが、30000列の制限があります。awk または sed スクリプトでこの作業を行うことができますが、私はそれらすべてをよく知らないので、非常に長い時間がかかるのではないかと心配しています。ソリューションで必要な場合は、サーバーを使用できます。助言がありますか?

4

1 に答える 1

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 に出力されます。

一度にすべてのファイルをマージできないことに注意してください。1 つには、350,000 個のファイル名を引数としてプロセスに渡すことはできず、2 つ目に、プロセスは一度に 1024 個のファイルしか開くことができません。

したがって、いくつかのパスでそれを行う必要があります。つまり、ファイル 1 ~ 1000、次に 1001 ~ 2000 などをマージします。その後、結果の 350 個の中間ファイルを一度にマージできるはずです。

os.listdir()または、名前またはすべてのファイルを取得し、このスクリプトを数回呼び出すラッパー スクリプトを作成することもできます。

于 2013-07-17T14:43:15.000 に答える