考え
データ移行などの作業で
コード変換 新旧の対応表を作って順次置換
って作業あるかと思う。
その関数を作ってみた
ソースコード
#コード変換
import csv
#指定したCSV(2列限定)を順次読み込み。新旧対応表を作る
def getcsvconv(fname:str)->dict:
with open(fname, encoding="shift_jis") as f:
reader = csv.reader(f)
conv_dic = {row[0]:row[1] for row in reader} #リスト内包表記 旧コードをkeyに、新コードをValue
return conv_dic
#指定されたファイル(CSV)の指定位置のコードを変換する。
def code_conv(fname:str,rownum:int,converter:dict):
#ファイル名生成
outfname = fname.replace("exp","imp")
with open(outfname, "w", newline="",encoding="UTF-8") as f:
writer = csv.writer(f, delimiter=",", quotechar='"')
with open(fname, encoding="UTF-8") as f:
reader = csv.reader(f)
for row in reader:
#指定位置をコード変換
convafterrow = row
convafterrow[rownum] = converter[row[rownum]]
writer.writerow(convafterrow)
#本体処理
#コード変換辞書の準備
conv_dic = getcsvconv("対応表.csv")
#変換対象の2次元リスト ファイル名,変換列位置(0スタート)
conv_pre_flist = [
["ほにゃらら.csv",2], #
["なんちゃら.csv",2], # 3列目
#["ごにょごにょ.csv",2], #変換対象外
]
for row in conv_pre_flist:
code_conv(row[0],row[1],conv_dic)