csv-Datei lesen, weiterarbeiten und in andere csv wegschreiben
Verfasst: Mittwoch 11. Juli 2018, 23:01
Kann man eine CSV-Datei öffnen, deren Werte lesen, weiterverarbeiten und im gleichen zu die ergänzte Liste in eine neue CSV-Datei schreiben? Konkret get es um Liste mit 2 Postleitzahlen, die ich einlese. Ich ermittle für diese beiden PLZs deren Entfernung und möchte das Ergebnis nun in eine neue CSV schreiben.
# Berechnet die Entfernung von zwei PLZ-Gebieten zueinander
# -*- coding: utf-8 -*-
import pygeodb
import csv
import os
os.system('clear')
PLZ1="14163"
with open('VeraOut.csv', 'w') as OutputFile:
fieldnames = ['ID', 'PLZ1', 'PLZ2', 'Distanz']
writer = csv.DictWriter(OutputFile, delimiter=',', fieldnames=fieldnames)
writer.writeheader()
with open('VeraIn.csv') as InputFile:
fieldnames = ['ID', 'PLZ1', 'PLZ2']
reader=csv.DictReader(InputFile)
for row in reader:
ID = row['ID']
PLZ1 = row['PLZ1']
PLZ2 = row['PLZ2']
Distanz = pygeodb.distance(PLZ1,PLZ2)
Km = str(int(round(round(Distanz) / 1000))).strip()
Ausgabe='ID' + ID + ' Entfernung von PLZ ' + PLZ1 + " nach " + PLZ2 + " = " + str(Distanz) + " Meter / " + Km + " km"
print Ausgabe
writer.writerow({row['ID']:ID,row['PLZ1']:PLZ1, row['PLZ2']:PLZ2}) #, row['Distanz']:Distanz})
So wie ich es mir gedachte geht es leider nicht, die Felhlermeldung listet die erste Datenzeile auf:
File "PLZDistanceWriter.py", line 26, in <module>
writer.writerow({row['ID']:ID,row['PLZ1']:PLZ1, row['PLZ2']:PLZ2}) #, row['Distanz']:Distanz})
File "/usr/lib/python2.7/csv.py", line 152, in writerow
return self.writer.writerow(self._dict_to_list(rowdict))
File "/usr/lib/python2.7/csv.py", line 148, in _dict_to_list
+ ", ".join([repr(x) for x in wrong_fields]))
ValueError: dict contains fields not in fieldnames: '1', '14163', '10243'
Die Input-Datei VeraIn halt folgende Einträge:
ID,PLZ1,PLZ2
1,14163,10243
2,14163,72074
3,72074,14109
Hast jemand einen Tipp, wie man das lösen könnte? Ich komme hier nicht weiter.
# Berechnet die Entfernung von zwei PLZ-Gebieten zueinander
# -*- coding: utf-8 -*-
import pygeodb
import csv
import os
os.system('clear')
PLZ1="14163"
with open('VeraOut.csv', 'w') as OutputFile:
fieldnames = ['ID', 'PLZ1', 'PLZ2', 'Distanz']
writer = csv.DictWriter(OutputFile, delimiter=',', fieldnames=fieldnames)
writer.writeheader()
with open('VeraIn.csv') as InputFile:
fieldnames = ['ID', 'PLZ1', 'PLZ2']
reader=csv.DictReader(InputFile)
for row in reader:
ID = row['ID']
PLZ1 = row['PLZ1']
PLZ2 = row['PLZ2']
Distanz = pygeodb.distance(PLZ1,PLZ2)
Km = str(int(round(round(Distanz) / 1000))).strip()
Ausgabe='ID' + ID + ' Entfernung von PLZ ' + PLZ1 + " nach " + PLZ2 + " = " + str(Distanz) + " Meter / " + Km + " km"
print Ausgabe
writer.writerow({row['ID']:ID,row['PLZ1']:PLZ1, row['PLZ2']:PLZ2}) #, row['Distanz']:Distanz})
So wie ich es mir gedachte geht es leider nicht, die Felhlermeldung listet die erste Datenzeile auf:
File "PLZDistanceWriter.py", line 26, in <module>
writer.writerow({row['ID']:ID,row['PLZ1']:PLZ1, row['PLZ2']:PLZ2}) #, row['Distanz']:Distanz})
File "/usr/lib/python2.7/csv.py", line 152, in writerow
return self.writer.writerow(self._dict_to_list(rowdict))
File "/usr/lib/python2.7/csv.py", line 148, in _dict_to_list
+ ", ".join([repr(x) for x in wrong_fields]))
ValueError: dict contains fields not in fieldnames: '1', '14163', '10243'
Die Input-Datei VeraIn halt folgende Einträge:
ID,PLZ1,PLZ2
1,14163,10243
2,14163,72074
3,72074,14109
Hast jemand einen Tipp, wie man das lösen könnte? Ich komme hier nicht weiter.