Der funktion wird eine Liste mit den Spaltennamen übergeben, die wir haben wollen (in der CSV-Datei gibt es noch mehr Spalten, die ich aber nicht haben will):
Code: Alles auswählen
column=["ANREDE", "NAME", "VORNAME", "LAND", "PLZZ", "ORT", "STRASSE", "TELEFON", "TELEFAX", "TELEFON2", "BEMERKUNG", "STICHWORT1", "STICHWORT2", "ZUSATZ1", "ZUSATZ2", "ERFDAT", "L_DAT", "RECORDID"]
So schaut es mit der Schleife aus:
Code: Alles auswählen
reader = csv.reader(open(data, "rb"), delimiter=";")
row_count = 0
column_check=[]
for row in reader:
#~ Die Erste Zeile enthaelt die SPaltennamen. Wir suchen die Nummern der Spalten
if row_count <= 0:
print "Spalten mit Vorgabe abgleichen..."
col_count = 0
for i in row:
if i in column:
column_check.append(col_count)
col_count += 1
if len(column_check) != len(column):
sys.exit("Fehler: Die Ausgangsdatei enthaelt nicht alle \
benoetigten Spalten! Programm wird beendet!")
#~ Jetzt die Eingabe der Datensaetze die benoetigt werden
else:
col_count = 0
col_index = 0
data_dict = {}
error_log = 0
#~ print "-----"
for i in row:
if col_count in column_check:
#~ print "%s ist da und bezeichnet %s" % (column[col_index], i)
data_dict[column[col_index]] = i.decode("utf-8")
col_index += 1
col_count += 1
try:
fields = data_dict.keys()
values = data_dict.values()
placeholder = "?"
fieldlist = ",".join(fields)
placeholderlist = ",".join([placeholder] * len(fields))
query = "insert into 'Adressdaten' (%s) values (%s)" % (fieldlist, placeholderlist)
cursor.execute(query, values)
#~ print "Speichere Datensatz", data_dict['VORNAME'], data_dict['NAME'], " - Erfolg!"
print ".",
sys.stdout.flush()
time.sleep(0.001)
except:
print "\nFehler beim Import von Datensatz: ", data_dict['VORNAME'], data_dict['NAME'], "\n"
error_log += 1
row_count += 1
print "\nCheck: ", column_check
connection.commit()
print " * Import beendet"
print " * Fehler: ", error_log
Funktioniert wunderbar
(Ich weiß, hält sich noch nicht an die PEP8. Nicht böse sein!)