5.54. msortf レコードの並べ換え¶
f=
パラメータで指定した項目を基準にして、レコードを並べ換える。ソーティングアルゴリズムはquick sortを利用しており、
安定ソート(キーの値が同じ行については元の順序を保存する)にはならないことに注意する。出力CSVの項目名の後ろには、並び順情報として %
で始まる文字列が付加される。
書式は %優先順位[並び順]
で、
詳細は以下、 f=
パラメータを参照のこと。
パラメータ¶
i= : 型=str , 任意(default=標準入力)
入力データを指定する。
o= : 型=str , 任意(default=標準出力)
出力データを指定する。
f= : 型=str , 必須
レコードを並べ換える基準となる項目名リストを指定する。並び順は、数値/文字列、昇順/降順の組み合せで4通り指定できる。指定方法は%
に続けてn
とr
を以下の通り組み合わせる。文字列昇順:項目名
(%
指定なし)、文字列逆順:f=項目名%r
、数値昇順:f=項目名%n
、数値降順:f=項目名%nr
。
noflg= : 型=bool , 任意(default=False)
出力CSVのヘッダーにソーティングの印(%0,%0n
など)を付けない。
pways= : 型=str , 任意(default=)
同時併合データ数([2-100]:デフォルト32)【任意】分割ソートされた複数のデータを同時に何個併合するかを指定する。
blocks= : 型=str , 任意(default=)
バッファブロック数([1-1000]:デフォルト10)【任意】メモリ内でソートする際のメモリサイズ上限をブロックサイズで指定する。1ブロックは入力バッファサイズ×4で、デフォルトは4MB。
maxlines= : 型=str , 任意(default=)
メモリソートレコード件数上限([100-1000万]:デフォルト50万)【任意】メモリ内でソートする際の件数の上限を指定する。データの一行あたりの平均サイズに応じて、
threadCnt= : 型=str , 任意(default=)
メモリ内でソートを実行するthread数 ([1-50]:デフォルト8)【任意】分割ソートする際に、マルチスレッドの機能を用いて同時にソートする数を指定する。
共通パラメータ¶
i= , o= , assert_diffSize= , nfn= , nfno= , x= , tmpPath= , precision=
利用例¶
importと入力データ(CSV)の準備
1import nysol.mcmd as nm 2 3with open('dat1.csv','w') as f: 4 f.write( 5'''item,date,quantity,price 6B,20081201,4,40 7A,20081201,10,200 8A,20081201,10,100 9B,20081203,5,50 10B,20081201,2,500 11A,20081201,3,300 12''')
基本例
item、date
順に並べ替える。
1nm.msortf(f="item,date", i="dat1.csv", o="rsl1.csv").run() 2### rsl1.csv の内容 3# item%0,date%1,quantity,price 4# A,20081201,10,200 5# A,20081201,10,100 6# A,20081201,3,300 7# B,20081201,4,40 8# B,20081201,2,500 9# B,20081203,5,50
数量(quantity)降順,金額(price)昇順に並べ替える例
1nm.msortf(f="quantity%nr,price%n", i="dat1.csv", o="rsl2.csv").run() 2### rsl2.csv の内容 3# item,date,quantity%0nr,price%1n 4# A,20081201,10,100 5# A,20081201,10,200 6# B,20081203,5,50 7# B,20081201,4,40 8# A,20081201,3,300 9# B,20081201,2,500