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
関連メソッド¶
msep レコードの分割 : ちょうど逆の動きをする。