5.9. mchgstr 文字列の置換

f= パラメータで指定した項目について、 c= パラメータで指定した置換条件で文字列を置換する。

パラメータ

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

入力データを指定する。

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

出力データを指定する。

c= : 型=str , 必須

置換対象となる文字列と置換文字列を指定する。

f= : 型=str , 必須

ここで指定した項目(複数項目指定可)の文字列を c= パラメータで指定した置換条件リストに従って置換する。

O= : 型=str , 任意(default=null値)

c= パラメータで指定した置換条件リストのいずれとも合致しない値を
置換するときの文字列(指定がなければNULL値となる)を指定する。

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

このオプションにより、指定した項目を置き換えるのではなく、

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

c= パラメータで指定した置換条件リストのいずれとも合致しない値は、
その項目の値のまま出力する。

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

検索を完全一致ではなく部分文字列マッチで比較する
すなわち、 f= パラメータで指定した項目の値に、
c= パラメータで指定した置換条件で文字列を置換する。

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

sub オプションが指定されているときにワイド文字として部分文字列マッチをおこなう。

利用例

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

 1import nysol.mcmd as nm
 2
 3with open('dat1.csv','w') as f:
 4  f.write(
 5'''id,item
 61,01
 72,02
 83,03
 94,04
105,05
11''')
12
13with open('dat2.csv','w') as f:
14  f.write(
15'''id,item
161,0111
172,0121
183,0231
194,0241
205,0151
21''')
22
23with open('dat3.csv','w') as f:
24  f.write(
25'''id,city
261,奈良市
272,下市町
283,十津川村
294,五條市
305,山添村
31''')

基本例

item の値が "01""A" に、 "03""B" に、 "04""C" に置換する。 その他はNULL値として出力する。

1nm.mchgstr(f="item", c="01:A,03:B,05:C", i="dat1.csv", o="rsl1.csv").run()
2### rsl1.csv の内容
3# id,item
4# 1,A
5# 2,
6# 3,B
7# 4,
8# 5,C

条件に合致しない値を置換する文字列の指定

O= パラメータを指定することで、 置換条件に合致しない場合は "out of range" という文字列に置換して出力する。

1nm.mchgstr(f="item", c="01:A,03:B,05:C", O="out of range", i="dat1.csv", o="rsl2.csv").run()
2### rsl2.csv の内容
3# id,item
4# 1,A
5# 2,out of range
6# 3,B
7# 4,out of range
8# 5,C

新しい項目として出力

A=True オプションを付けることで、新しい項目( item info )として出力する。

1nm.mchgstr(f="item:item info", c="01:A,03:B,05:C", O="out of range", A=True, i="dat1.csv", o="rsl3.csv").run()
2### rsl3.csv の内容
3# id,item,item info
4# 1,01,A
5# 2,02,out of range
6# 3,03,B
7# 4,04,out of range
8# 5,05,C

条件外を項目の値として出力

F=True オプションを付けることで、 置換条件に合致しない場合は、元の値をそのまま出力する。

1nm.mchgstr(f="item", c="01:A,03:B,05:C", F=True, i="dat1.csv", o="rsl4.csv").run()
2### rsl4.csv の内容
3# id,item
4# 1,A
5# 2,02
6# 3,B
7# 4,04
8# 5,C

条件を部分文字列マッチで置換

sub=True オプションをつけることで、部分文字列の置換となる。 以下の例では、 item 項目に文字列 "01" が含まれていれば、それを "A" に置換する。

1nm.mchgstr(f="item", c="01:A", sub=True, i="dat2.csv", o="rsl5.csv").run()
2### rsl5.csv の内容
3# id,item
4# 1,A11
5# 2,A21
6# 3,
7# 4,
8# 5,A51

ワイド文字での部分文字列マッチ

ワイド文字の部分文字列置換をする場合は W=True オプションを用いる。 ただし、UTF-8エンコーディングを用いているのであれば W=True をつけなくても正しく動作する。 詳しくは「hyperref[sect:multibyte]{マルチバイト文字}」の節を参照されたい。

1nm.mchgstr(f="city", c="市:01,町:02,村:02", sub=True, W=True, i="dat3.csv", o="rsl6.csv").run()
2### rsl6.csv の内容
3# id,city
4# 1,奈良01
5# 2,下0102
6# 3,十津川02
7# 4,五條01
8# 5,山添02

関連メソッド