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)

このオプションにより、指定した項目を置き換えるのではなく、新たに項目が追加される。

利用例

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 オプションを使用し、変換結果を新たな f1f2 項目に抽出する。

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,

関連メソッド