5.37. mnumber 連番

数字連番もしくはアルファベット連番(A,B,...,Z,AA,AB,...,AZ,BA,BB,...,ZZ,AAA,AAB,...)ををふり、 a= パラメータで指定した項目名で出力する。

パラメータ

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

入力データを指定する。

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

出力データを指定する。

a= : 型=str , 必須

新たに追加される項目の名前を指定する。【但し、-nfn,-nfnoオプション指定時は必要なし】

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

同Rankの処理方法
同一キー同一ソート項目値への処理方法を指定する。
指定しない場合は、デフォルトは e=seq である。
seq: 同Rankの場合は各行に連番を振るが、その順序は不定である。
same: 同Rankの場合は同じNoもしくはアルファベットを付け加える。
skip: 同Rankの場合は同じNoを振り、
次のNoはスキップするようにNoもしくはアルファベット連番を付け加える。
(注意) e={same/skip} を指定する場合は、 s= パラメータを同時に指定しなければならない。

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

連番の間隔を指定する。

k= : 型=str , 任意(default=キーブレイク処理しない)

連番もしくは連文字をふる単位となる項目名リスト(複数項目指定可)を指定する。【 集計キーブレイク処理
(注意)指定する場合は事前に k= パラメータで指定する連番、
もしくは連文字をふる単位となる項目順に並べ替えておく必要がある。

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

ここで指定した項目(複数項目指定可)で並べ替えられた後、連番が追加される。
B オプション指定時以外は必須。

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

開始No
連番の開始Noを指定する。
大文字のアルファベットが指定された場合はアルファベット連番となる。
ただし、アルファベット連番の場合、間隔( I= )に負の値は指定できない。

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

キー毎に連番もしくはアルファベット連番をふる。
あるキー内では全行同じNoもしくはアルファベットがふられる。

共通パラメータ

i= , o= , assert_diffSize= , assert_nullkey= , nfn= , nfno= , x= , q= , tmppath= , precision=

利用例

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

 1import nysol.mcmd as nm
 2
 3with open('dat1.csv','w') as f:
 4  f.write(
 5'''Customer,Val,Sum
 6A,29,300
 7B,35,250
 8C,15,200
 9D,23,150
10E,10,100
11''')
12
13with open('dat2.csv','w') as f:
14  f.write(
15'''Date
1620090101
1720090101
1820090102
1920090103
2020090103
21''')
22
23with open('dat3.csv','w') as f:
24  f.write(
25'''Customer,Val,Sum
26A,3,300
27B,1,250
28C,2,250
29D,1,150
30E,1,100
31''')
32
33with open('dat4.csv','w') as f:
34  f.write(
35'''Customer,Val,Sum
36A,1,100
37B,1,150
38C,1,250
39D,2,250
40E,3,300
41''')

数字の連番

Customer項目名順(昇順)に連番を振り「No」という項目名で出力する。

1nm.mnumber(s="Customer", a="No", i="dat1.csv", o="rsl1.csv").run()
2### rsl1.csv の内容
3# Customer%0,Val,Sum,No
4# A,29,300,0
5# B,35,250,1
6# C,15,200,2
7# D,23,150,3
8# E,10,100,4

Date項目順の連番

Date項目順(昇順)に連番をふる。その際、同じDateには同じNoを振り「No」という項目名で出力する。

1nm.mnumber(k="Date", a="No", B=True, i="dat2.csv", o="rsl2.csv").run()
2### rsl2.csv の内容
3# Date%0,No
4# 20090101,0
5# 20090101,0
6# 20090102,1
7# 20090103,2
8# 20090103,2

Sum項目順の連番(同Rankは同じアルファベットをふる)

Sum項目の多い順(降順)にアルファベットのAから順に連文字を振り「Rank」という項目名で出力する。 また、同Rankの場合は同じアルファベット文字を振ることにする。

1nm.mnumber(a="Rank", e="same", s="Sum%nr", S="A", i="dat3.csv", o="rsl3.csv").run()
2### rsl3.csv の内容
3# Customer,Val,Sum%0nr,Rank
4# A,3,300,A
5# B,1,250,B
6# C,2,250,B
7# D,1,150,C
8# E,1,100,D

Sum項目順の連番(同Rankは並び順でNoをふる)

Sum項目の多い順(降順)に連番を振り「Rank」という項目名で出力する。 その際、同Rankの場合は並び順でNoを振ることにする。

1nm.mnumber(a="Rank", e="seq", s="Sum%nr", i="dat3.csv", o="rsl4.csv").run()
2### rsl4.csv の内容
3# Customer,Val,Sum%0nr,Rank
4# A,3,300,0
5# B,1,250,1
6# C,2,250,2
7# D,1,150,3
8# E,1,100,4

Sum項目順の連番(同Rankは同じNoをふる)

Sum項目の多い順(降順)に連番を振り「Rank」という項目名で出力する。 その際、同Rankの場合は同じNoを振ることにする。

1nm.mnumber(a="Rank", e="same", s="Sum%nr", i="dat3.csv", o="rsl5.csv").run()
2### rsl5.csv の内容
3# Customer,Val,Sum%0nr,Rank
4# A,3,300,0
5# B,1,250,1
6# C,2,250,1
7# D,1,150,2
8# E,1,100,3

Sum項目順の連番(同Rankの場合は同じRankNoを振り、次のNoはスキップ)

Sum項目の多い順(降順)に連番を振り「Rank」という項目名で出力する。 その際、同Rankの場合は同じRankNoを振り、次のNoはスキップするようにNoを振ることにする。

1nm.mnumber(a="Rank", e="skip", s="Sum%nr", i="dat3.csv", o="rsl6.csv").run()
2### rsl6.csv の内容
3# Customer,Val,Sum%0nr,Rank
4# A,3,300,0
5# B,1,250,1
6# C,2,250,1
7# D,1,150,3
8# E,1,100,4

10から始まる連番

Sum項目の小さい順(昇順)に10から始まる連番を振り「Score」という項目名で出力する。 その際、同Rankの場合は同じRankNoを振り、次のNoはスキップするようにNoを振ることにする。

1nm.mnumber(a="Score", e="same", s="Sum%n", S="10", i="dat4.csv", o="rsl7.csv").run()
2### rsl7.csv の内容
3# Customer,Val,Sum%0n,Score
4# A,1,100,10
5# B,1,150,11
6# C,1,250,12
7# D,2,250,12
8# E,3,300,13

10から始まる5つ飛びの連番

Sum項目の小さい順番(昇順)に10から始まる5つ飛びの連番を振り「Score」という項目名で出力する。 また、同Rankの場合は同じNoを振ることにする。

1nm.mnumber(a="Score", e="same", s="Sum%n", S="10", I="5", i="dat4.csv", o="rsl8.csv").run()
2### rsl8.csv の内容
3# Customer,Val,Sum%0n,Score
4# A,1,100,10
5# B,1,150,15
6# C,1,250,20
7# D,2,250,20
8# E,3,300,25

関連メソッド