Если вы хотите действительно простой способ сделать это, просто создайте базу данных sqlite:
import sqlite3
conn = sqlite3.connect('single.db')
cur = conn.cursor()
cur.execute("""create table test(
f1 text,
f2 text,
f3 text,
f4 text,
f5 text,
f6 text,
f7 text,
f8 text,
f9 text,
f10 text,
f11 text,
f12 text,
f13 text,
f14 text,
f15 text,
primary key(f1, f2, f3, f4, f5, f6, f7,
f8, f9, f10, f11, f12, f13, f14, f15))
"""
conn.commit()
#simplified/pseudo code
for row in reader:
#assuming row returns a list-type object
try:
cur.execute('''insert into test values(?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?, ?, ?)''', row)
conn.commit()
except IntegrityError:
pass
conn.commit()
cur.execute('select * from test')
for row in cur:
#write row to csv file
Тогда вам не придется беспокоиться о какой-либо логике сравнения - просто позвольте sqlite позаботиться об этом за вас. Это, вероятно, не будет намного быстрее, чем хеширование строк, но это, вероятно, намного проще. Конечно, вы бы изменили тип, хранящийся в базе данных, если хотите, или нет, в зависимости от ситуации. Конечно, поскольку вы уже конвертируете данные в строку, вы можете вместо этого иметь только одно поле. Здесь много вариантов.