0

2つのCSVファイルがあり、それぞれに1つのデータベースにマージする異なる列が含まれています。両方のファイルのすべての列を含むデータベースをセットアップしましたが、マージする代わりに、load data infileを使用して両方のファイルをインポートすると(IEデータファイル1は列1〜6を埋め、データファイル2は7〜10を埋めます)データベースを取得します2倍の行(各CSVの各レコードに1行)とNULLSがソースCSVに表されていないデータを埋めます。

CSVをなんらかの方法でマージするか、上書きを有効にしてインポートするか、データベース内のデータを結合することで、これを修正できることを知っています。これを行うための最も効率的な方法は何ですか。

4

3 に答える 3

1

2つのCSVを1つに結合します。

Linuxプラットフォームを使用している場合は、pasteコマンドを使用して2つ以上のファイルを結合します。

PASTE(1)

名前
       貼り付け-ファイルの行をマージします

概要
       貼り付け[オプション]...[ファイル]..。

説明
       から順番に対応する行で構成される行を書き込みます
       TABで区切られた各FILEは、標準出力になります。  
       FILEがない場合、またはFILEが-の場合は、標準入力を読み取ります。

       長いオプションに対する必須の引数は、短いオプションにも必須です。

       -d、-delimiters = LIST
              TABの代わりにLISTの文字を再利用する

       -s、-serial
              並列ではなく、一度に1つのファイルを貼り付けます

       --helpこのヘルプを表示して終了します

       - バージョン
              バージョン情報を出力して終了します

そのような

paste file1.csv file2.csv > file3.csv
于 2011-01-17T06:57:35.077 に答える
1

これを行う最良の方法は、スクリプトを使用することです。CSVインポートスクリプトは通常、python、ruby、phpなどのスクリプト言語で記述されています。

最初のCSVで作成されたレコードの更新を実行するには、2番目のCSVのインポーターが必要なだけなので、スクリプトは実際には5〜10行になります。各CSVのサンプルレコードを提供していただければ、喜んで作成させていただきます。

編集: これは、ファイルを結合するためのPythonスクリプトであり、file1の行とfile2の行の間にセミコロンを追加します。これは基本的に、Linuxのpasteコマンドが実行することを実行します。

lines1 = open('file1.txt').readlines()
lines2 = open('file2.txt').readlines()
outfile = open('outfile.txt', 'w')

if len(lines1) != len(lines2):
    raise Exception("Files need to be the same length, but file1 is %s lines long and file2 is %s lines long" % (len(lines1), len(lines2)));

for i in range(len(lines1)):
    combined = lines1[i].strip() + ";" + lines2[i].strip() + "\n"
    outfile.write(combined)

名前を付けて保存し、combine.pyと入力すると実行できますpython combine.py。配置するフォルダには、、、、が含まれている必要がfile1.txtありfile2.txtますoutfile.txt

于 2011-01-17T06:52:01.487 に答える
0

PerlとText::CSVモジュールを見てみます。考慮する必要がある問題の1つは、2つのファイルでデータが同じ順序になっているかどうかです。

于 2011-01-17T07:05:48.593 に答える