前提・実現したいこと
python3で、修正元のデータに修正データを適応させ修正後のデータの形で出力をしたいです。
pythonとCSVファイルのみで操作をしたいです。
###コード
修正元のデータ
csv
1No,出勤時刻,退勤時刻,修正理由 21,2020-12-09 14:41,2020-12-09 14:41, 32,2020-12-09 14:56,2020-12-09 14:56, 43,2020-12-09 14:58,2020-12-09 14:58, 54,2020-12-09 15:01,2020-12-09 15:01, 65,2020-12-09 15:11,2020-12-09 15:11, 76,2020-12-09 15:13,2020-12-09 15:13, 87,2020-12-09 15:15,2020-12-09 15:15, 98,2020-12-09 15:18,2020-12-09 15:18,
修正データ
csv
1No,出勤時刻,退勤時刻,修正理由 21,2020-12-07 9:00,,打刻忘れ 31,,2020-12-07 17:00,打刻ミス 42,2020-12-08 9:00,,打刻忘れ 53,,2020-12-08 17:00,打刻ミス 65,2020-12-10 8:30,,打刻忘れ 77,,2020-12-15 17:00,打刻ミス 86,,2020-12-07 19:00,打刻忘れ 95,2020-12-10 8:00,,打刻ミス
修正後のデータ
csv
1No,出勤時刻,退勤時刻,修正理由 21,2020-12-07 9:00,2020-12-07 17:00,打刻ミス 32,2020-12-08 9:00,2020-12-09 14:56,打刻忘れ 43,2020-12-09 14:58,2020-12-09 14:58,打刻ミス 54,2020-12-09 15:01,2020-12-08 17:00, 65,2020-12-10 8:00,2020-12-09 15:11,打刻ミス 76,2020-12-09 15:13,2020-12-07 19:00,打刻忘れ 87,2020-12-09 15:15,2020-12-15 17:00,打刻ミス 98,2020-12-09 15:18,2020-12-09 15:18,
###現段階で試していること・調査中
python側(修正データは読み込んでいません)
nan部分をnanで上書きしたくない(修正データがnanとき、修正元の退勤時間のデータをそのまま使いたい)
Noが1の部分を指定して上書きするコード(間違っている可能性あり)
python
1import csv 2 3 4def read_csv(filename): 5 f = open(filename, "r") 6 csv_data = csv.reader(f) 7 list1 = [e for e in csv_data] 8 f.close() 9 return list1 10 11 12def update_list2d(list1, data): 13 for i in range(len(list1)): 14 if list1[i][0] == data[0]: list1[i] = data 15 return list1 16 17 18def write_csv(filename, list1): 19 with open(filename, 'w', newline='') as f: 20 writer = csv.writer(f) 21 writer.writerows(list1) 22 23 f.close() 24 25 26def main(): 27 #csvファイルのパス 28 csv_path = "data1.csv" 29 #csvファイルのロード 30 csv_data = read_csv(csv_path) 31 32 data = ["1", "2020-12-09 14:42", nan, ""] 33 csv_data2 = update_list2d(csv_data, data) 34 write_csv(csv_path, csv_data2) 35 36 37if __name__ == '__main__': 38 main()
条件
修正データの空白の部分は修正元のデータをそのまま使う
Noを参照して上の行から下の行までを順次適応させたい
補足情報
・python3.6
・修正元:data1.csv
・修正データ:fix.csv
・修正後:data1_after.csv
修正元のNoは修正データの参照元と仮定しています
修正データのNoは修正元の参照先と仮定しています
また、過去に似たような質問があった場合は、リンクを載せていただけると幸いです。
###追記
手段は問いません。
おかしい部分があった場合は指摘をいただけると幸いです。
素人なのでどなたかご教授くだされば幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。