#概要
- 9桁の和暦 すなわち「H30.12.24」、「H30/12/24」な形式の日付を、7桁の和暦 すなわち 「4301224」 のような形式の日付に変換します。
- かつ、CSVで読み書きします。
- Python 3.7.2
##したいこと
【infile.csv】 【outfile.csv】
「M 1. 1.15」 ーー> 「M 1. 1.15」「1010115」
「T 1. 1.15」 ーー> 「T 1. 1.15」「2010115」
「S 1. 1.15」 ーー> 「S 1. 1.15」「3010115」
「H 1. 1.15」 ーー> 「H 1. 1.15」「4010115」
「R 1. 1.15」 ーー> 「R 1. 1.15」「5010115」
「R12.10.15」 ーー> 「R12.10.15」「5121015」
「R12. 3. 9」 ーー> 「R12. 3. 9」「5120309」
##infile.csv
M 1. 1.15
T 1. 1.15
S 1. 1.15
H 1. 1.15
R 1. 1.15
R12.10.15
R12. 3. 9
#ソース
# CSVファイルを読み込み
import csv
# インプットファイルオープン
infile = open('infile.csv', 'r')
# アウトプットファイルオープン
outfile = open('outfile.csv', 'w', encoding="utf-8")
# ライター準備
writer = csv.writer(outfile, lineterminator='\n')
# infileのレコードを順番に読み込み、outlistのクリア→編集→書き出し、を繰り返す
for row in csv.reader(infile):
wareki9 = row[0]
outlist = []
outlist.append(wareki9)
wareki7 = []
for i in range(0,9):
if i == 0:
if wareki9[i] == 'M':
wareki7.append('1')
elif wareki9[i] == 'T':
wareki7.append('2')
elif wareki9[i] == 'S':
wareki7.append('3')
elif wareki9[i] == 'H':
wareki7.append('4')
elif wareki9[i] == 'R':
wareki7.append('5')
elif i==1 or i==2 or i==4 or i==5 or i==7 or i==8:
if wareki9[i] == ' ':
wareki7.append('0')
else:
wareki7.append(wareki9[i])
wareki7_int = int(''.join(wareki7))
outlist.append(wareki7_int)
writer.writerow(outlist)
# ファイルクローズ
infile.close()
outfile.close()
infileのレコードを順に読み込むループ内では、
1.読み込んだレコード内容(rowの0番目要素:9桁和暦文字列)を、
write用リスト outlist へ出力
2.9桁和暦文字列 wareki9 を先頭から1文字ずつチェック、
7桁和暦用文字列リスト wareki7 へ対応値を順々に送る
3.9桁和暦文字列をチェックし終わったらリスト wareki7 の要素を
join結合し、7桁和暦文字列を得る。
int型へ変換して、write用リスト outlist へ出力
を行っています。これをinfile内の全レコードが終わるまで繰り返します。
##outfile.csv
M 1. 1.15,1010115
T 1. 1.15,2010115
S 1. 1.15,3010115
H 1. 1.15,4010115
R 1. 1.15,5010115
R12.10.15,5121015
R12. 3. 9,5120309
#おわり
できました。