データ準備
こんなcsvがあるとする
※フィクション。類似名で実際に存在するキャラクターとは一切関係ない。
cat profile.csv
No, 作品, 作品_出典元, 名前, 名前_種類, 年齢
1, 崖の上のxニョ, xブリ, ぽにょ, 魚, 16
2, Frozxn, Disnxy, えるざ,雪女,20
3, リラッxマ, サンxックス, こぐまちゃん,熊,3
4, こげxん, Sanxio, こげぱん,パン,0.1
5, 名x偵コナン, サンデー, こなん,人間,17
6, カピバxさん, Trtworxs, ほわいとさん,カピバラ,3
7, xウルと動く城,xブリ, はうる,魔法使い,100
8, リラッxマ, サxxックス, こぐまちゃん,熊,5
9, アナ雪, Disnxy, えるーざ,雪女,20
やりたいこと
被っているデータを消したデータをcsv出力したい。
No.3とNo.8、No.2とNo.9が被っていそうだが、法則性なく微妙に揺れている。
辞書作成 step1
- 作品名と名前の辞書aを作成する
a = dict()
with open('profile.csv', 'r') as pfile:
for line in pfile:
arr = line[:-1]
title = arr[1]
name = arr[3]
a[title, name] = arr
aをこのまま出力するとこんな感じ、
No, 作品, 作品_出典元, 名前, 名前_種類, 年齢
1,崖の上のxニョ,xブリ,ぽにょ,魚,16
2,Frozxn,Disnxy,えるざ,雪女,20
8,リラッxマ,サxxックス,こぐまちゃん,熊,5
4,こげxん, Sanxio,こげぱん,パン,0.1
5,名x偵コナン,サンデー,こなん,人間,17
6,カピバxさん,Trtworxs,ほわいとさん,カピバラ,3
7,xウルと動く城,xブリ,はうる,魔法使い,100
9,アナ雪,Disnxy,えるーざ,雪女,20
No.3とNo.8の重複は消せたがNo.2とNo.9のはまだ残っている。
辞書作成 step2
- 辞書aのキーを変えて出典元、種類、年齢をキーとした辞書を作成する。
b = dict()
for arr in a.values():
presented = arr[2]
name_category = arr[4]
age = arr[5]
b[presented, name_category, age] = arr
これでNo.2とNo.9の重複も消せた。
あとはbをファイル出力するだけ。
import csv
with open('result.csv', 'w') as rfile:
writer = csv.writer(rfile, lineterminator='\n')
writer.writerows(b.values())
結果はこちら
No, 作品, 作品_出典元, 名前, 名前_種類, 年齢
1,崖の上のxニョ,xブリ,ぽにょ,魚,16
9,アナ雪,Disnxy,えるーざ,雪女,20
8,リラッxマ,サxxックス,こぐまちゃん,熊,5
4,こげxん, Sanxio,こげぱん,パン,0.1
5,名x偵コナン,サンデー,こなん,人間,17
6,カピバxさん,Trtworxs,ほわいとさん,カピバラ,3
7,xウルと動く城,xブリ,はうる,魔法使い,100
でけた。
まとめ
・辞書機能を用いて揺れてる文字列以外のキーで重複削除ができる。
・データが後勝ちになるのでどっちが残ってもいいケースに限り利用可