5.17. mdformat 日付時刻抽出¶
他のシステムからエクスポートしたCSVデータでは、
日付時刻項目にスラッシュ記号やコロン記号が入っていることが多く、
また月日や時が1桁で格納されている場合もある
(例: 2014/7/18 1:57
)。
このような項目をそのままMCMDで扱おうとすると、
日付計算や並べ替え、範囲検索がうまくいかない。
mdformat
コマンドを使うことで、
f=
パラメータで指定した項目から、
c=
パラメータで指定したフォーマットに従って
年月日・時分秒を抽出し、MCMDで扱うことが可能な
日付型や時刻型
に変換することができる。
パラメータ¶
i= : 型=str , 任意(default=標準入力)
入力データを指定する。
o= : 型=str , 任意(default=標準出力)
出力データを指定する。
f= : 型=str , 必須
抽出対象となる項目名リスト(複数項目指定可)を指定する。
c= : 型=str , 必須
文字列のフォーマットを指定する。フォーマットの変換指定文字参照
A= : 型=bool , 任意(default=False)
このオプションにより、指定した項目を置き換えるのではなく、新たに項目が追加される。
共通パラメータ¶
i= , o= , assert_diffSize= , assert_nullin= , assert_nullout= , nfn= , nfno= , x= , tmppath= , precision=
利用例¶
importと入力データ(CSV)の準備
1import nysol.mcmd as nm 2 3with open('dat1.csv','w') as f: 4 f.write( 5'''fld 6date:20120304 time:121212 7date:20101204 time:011309.1234 8''') 9 10with open('dat2.csv','w') as f: 11 f.write( 12'''fld,fld2 132010/11/20,2010/11/21 142010/1/1,2010/1/2 152011/01/01,2010/01/02 162010/1/01,2010/1/02 17''') 18 19with open('dat3.csv','w') as f: 20 f.write( 21'''fld 222010 11 20 12:34:56 232011 01 01 23:34:56 242010 1 01 123455 25''')
基本例
fld
項目から日付・時刻を抽出し変換する。
fld
項目には「date:年月日 time:時分秒.マイクロ秒」の形式で日付・時刻が格納されているので、
c=
パラメータには「 date:%Y%m%d time:%H%M%s
」と指定している。
1nm.mdformat(f="fld", c="date:%Y%m%d time:%H%M%s", i="dat1.csv", o="rsl1.csv").run() 2### rsl1.csv の内容 3# fld 4# 20120304121212 5# 20101204011309.1234
項目の追加
fld1
項目、 fld2
項目には「年/月/日」形式で日付が格納されているので、
c=
パラメータには「 %Y/%m/%d
」と指定している。
A=True
オプションを使用し、変換結果を新たな f1
、 f2
項目に抽出する。
1nm.mdformat(f="fld:f1,fld2:f2", c="%Y/%m/%d", i="dat2.csv", A=True, o="rsl2.csv").run() 2### rsl2.csv の内容 3# fld,fld2,f1,f2 4# 2010/11/20,2010/11/21,20101120,20101121 5# 2010/1/1,2010/1/2,20100101,20100102 6# 2011/01/01,2010/01/02,20110101,20100102 7# 2010/1/01,2010/1/02,20100101,20100102
抽出がうまくいかない例
fld
項目には「年 月 日 時:分:秒」形式で日付が格納されているので、
c=
パラメータには「 %Y %m %d %H:%M:%S
」と指定している。
しかし形式が異なる行は抽出に失敗している。
1nm.mdformat(f="fld:f1", c="%Y %m %d %H:%M:%S", i="dat3.csv", A=True, o="rsl3.csv").run() 2### rsl3.csv の内容 3# fld,f1 4# 2010 11 20 12:34:56,20101120123456 5# 2011 01 01 23:34:56,20110101233456 6# 2010 1 01 123455,