5.7. mcat 併合

i= パラメータで指定した全データのレコードを、指定した順に併合する。 ワイルドカードでデータを指定した場合は、データのアルファベット順に併合される。

パラメータ

i= : 型=str , 任意(default=標準入力)

入力データリストを指定する。
複数のデータをカンマで区切って指定する。ワイルドカードを用いることができる。

o= : 型=str , 任意(default=標準出力)

出力データを指定する。

f= : 型=str , 任意(default=)

併合する項目名を指定する。
指定を省略すれば i= で指定した1つ目のデータの項目名が使われる。

skip_fnf= : 型=bool , 任意(default=False)

i= で指定したデータが存在しなくてもエラー終了しない。
ただし、全データがなければエラーとなる。

nostop= : 型=bool , 任意(default=False)

nostop , skip , force の各オプションは、指定の項目名がなかったときの動作を制御するフラグである。
nostop オプションは、指定の項目名がなければnullを出力する。
nfn オプションが同時に指定された場合,項目数が異なればエラー終了する。

skip= : 型=bool , 任意(default=False)

指定の項目名がなければそのデータは併合しない。
nfn オプションが同時に指定された場合、項目数が異なればそのデータは併合しない。

skip_zero= : 型=bool , 任意(default=False)

nfn オプションを指定していない場合でも0バイトデータでエラーにならないようにする。

flist= : 型=str , 任意(default=)

併合するデータリストをCSVデータとして指定する。flist=fileName:fldNameで指定する。

kv= : 型=str , 任意(default=)

パス名に含めた key-value の文字列を抜き出し項目名とその値としてデータに付加する。

force= : 型=bool , 任意(default=False)

指定の項目名がなければ,項目番号で強制併合する。
指定の項目番号がなければnullを出力する。

stdin= : 型=bool , 任意(default=False)

標準入力も併合する。

add_fname= : 型=bool , 任意(default=False)

併合元のデータを最終項目として追加する。
標準入力は /dev/stdin という名称になる。
項目名は fileName 固定なので、入力データに同一の項目名があるとエラーとなる。

共通パラメータ

i= , o= , add_fname= , -stdin= , assert_diffSize= , assert_nullin= , nfn= , nfno= , x= , tmppath= , precision=

利用例

importと入力データ(CSV)の準備

 1import nysol.mcmd as nm
 2
 3with open('dat1.csv','w') as f:
 4  f.write(
 5'''customer,date,amount
 6A,20081201,10
 7B,20081002,40
 8''')
 9
10with open('dat2.csv','w') as f:
11  f.write(
12'''customer,date,amount
13A,20081207,20
14A,20081213,30
15B,20081209,50
16''')
17
18with open('dat3.csv','w') as f:
19  f.write(
20'''customer,date,quantity
21A,20081201,3
22B,20081002,1
23''')

同一項目名ファイルの併合

1nm.mcat(i="dat1.csv,dat2.csv", o="rsl1.csv").run()
2### rsl1.csv の内容
3# customer,date,amount
4# A,20081201,10
5# B,20081002,40
6# A,20081207,20
7# A,20081213,30
8# B,20081209,50

項目名の異なるファイルの併合

i= の最初のファイル dat1.csv の項目「顧客,日付,金額」の3項目を併合する。 しかし、 dat3.csv には amount 項目がないので、エラーとなる。 ただし、 dat1.csv の内容は既に出力されていることに注意する。

1nm.mcat(i="dat1.csv,dat3.csv", o="rsl2.csv").run()
2### rsl2.csv の内容

項目名の異なるファイルの併合2

前例に nostop=True オプションを付けると、項目が見つからないデータについてはNULL値を出力するようになり、 途中でエラー終了することはなくなる。 その他にも、項目が見つからなかった場合の動作を変更するオプションとして、 skip , force がある。 詳しくはパラメータの説明を参照されたい。

1nm.mcat(nostop=True, i="dat1.csv,dat3.csv", o="rsl3.csv").run()
2### rsl3.csv の内容
3# customer,date,amount
4# A,20081201,10
5# B,20081002,40
6# A,20081201,
7# B,20081002,

項目名を指定して併合

f= で項目名を指定すると、それら指定した項目のみを併合する。

1nm.mcat(f="customer,date", i="dat2.csv,dat3.csv", o="rsl4.csv").run()
2### rsl4.csv の内容
3# customer,date
4# A,20081207
5# A,20081213
6# B,20081209
7# A,20081201
8# B,20081002

ワイルドカード指定

カレントディレクトリに dat1.csv,dat2.csv,dat3.csv の3つのCSVファイルがあったとして、 それらを全て併合するのにワイルドカード dat*.csv を指定する。

 1nm.mcat(force=True, i="dat*.csv", o="rsl7.csv").run()
 2### rsl7.csv の内容
 3# customer,date,amount
 4# A,20081201,10
 5# B,20081002,40
 6# A,20081207,20
 7# A,20081213,30
 8# B,20081209,50
 9# A,20081201,3
10# B,20081002,1
11# A,apple,100
12# A,milk,350
13# B,orange,100
14# B,orange,100
15# B,pineapple,500
16# B,wine,1000
17# C,apple,100
18# C,orange,100
19# D,orange,100

同一ファイルの複数回併合

同一ファイルを複数指定することも可能である。

1nm.mcat(i="dat1.csv,dat1.csv,dat1.csv", o="rsl8.csv").run()
2### rsl8.csv の内容
3# customer,date,amount
4# A,20081201,10
5# B,20081002,40
6# A,20081201,10
7# B,20081002,40
8# A,20081201,10
9# B,20081002,40

関連メソッド