2017-09-26 3 views
-1

Zunächst möchte ich sagen, ich bin komplett neu in Python, und habe sehr wenig Erfahrung in der Programmierung. Ich entschied mich bei meiner Arbeit Python als Umgebung für eine Jobautomatisierung zu verwenden. Ich muss eine bestimmte Menge des Datums in XLS, Geocode-Adressen exportieren und dann Heatmap/Population-Map auf Google API-Karten oder OpenSourceMaps erstellen. Ich habe bereits eine Lösung gefunden, aber ich habe Probleme, sie zu kombinieren, und habe mich in einem sehr frühen Stadium festgefahren.Python 3.6 Ausgabe CVS-Datei ist leer

siehe mein Code:

import os 
import pandas 
import geopy 
import urllib 
import csv 
import numpy 
import geopy 

# - - - - - - - - - 

fin = open ("source_file.csv","r") # open input file for reading 
users_dict = {} 
with open('output_file.csv', 'wb') as fout: # output csv file 
    writer = csv.writer(fout) 
    with open('source_file.csv','r') as csvfile: # input csv file 
     reader = csv.DictReader(csvfile, delimiter=',') 
     for row in reader: 
      location_string = row['city'] + ',' + row['street'] + ' ' + row['house'] 
      from geopy.geocoders import Nominatim 
      geolocator = Nominatim() 
      location = geolocator.geocode(location_string) 
      row['lat']=latitude = location.latitude 
      row['lng'] = location.longitude 
      users_dict.update(row) 
      print (users_dict) 
     fout.close() 
fin.close() 

Eingabedateiformat

unit_no,kod,street,house,city,lng,lat 
123456,00-001,nowy swiat,4,warszawa,, 

Wörterbuch Ausgabe:

{'unit_no': '123456', 'kod': '00-001', 'street': 'nowy swiat', 'house': '4', 'city': 'warszawa', 'lng': 21.0220598, 'lat': 52.2302825} 

Ergebnis: output_file.csv wird die Größe Null output_file.csv geöffnet zeigt nichts in

erwartete Ausgabedatei mit Daten:

unit_no,kod,street,house,city,lng,lat 
123456,00-001,nowy swiat,4,warszawa,21.0220598,52.2302825 

In meinem Kopf ist nächste Stufe GeoJSON Datei von erstellten Ausgabe und danach zu schaffen es meine Markierungen oder Bevölkerung auf der Karte sichtbar zu machen.

Vielen Dank im Voraus für wertvolle Ratschläge.

Antwort

0

eine Header-Liste machen und sie schreibt zuerst in output_file.csv

header = ['unit_no','kod','street','house','city','lng','lat'] 
writer.writerow(header) 

Dies wird die Kopf erste Reihe von csv machen und dann wird die Ausgabe-Wörterbuch jedes Mal mit dem ersten Reihe von csv beziehen und die Daten hinzufügen entsprechend.

+0

können Sie es wo um es in meinem Code hinweisen. Entschuldigung für eine so einfache Frage. Wenn ich es in den Abschnitt open (output_file ....) platzierte, zurückgegeben: TypeError: ein Byte-ähnliches Objekt wird benötigt, nicht 'str' – Krystian

+0

Gleich nachdem Sie den Writer definiert haben. Stellen Sie nach dem Drucken von user_dict sicher, dass Sie es in csv schreiben, indem Sie den Befehl writer verwenden (Sie haben es versäumt, das Diktat in csv zu schreiben). –

+0

Hallo Vinay, sehe meine Antwort auf den Beitrag mit Code nach der Änderung. Danke für deine Zeit, mir zu helfen. – Krystian

0

wenn ich dich verstanden und mein Code sollte wie folgt aussehen:

with open('output_file.csv', 'wb') as fout: # output csv file 
    writer = csv.writer(fout) 
    header = ['unit_no','kod','street','house','city','lng','lat'] # your suggestion 
    writer.writerow(header) # your suggestion 
    with open('source_file.csv','r') as csvfile: # input csv file 

und fertig mit:

 print (users_dict) 
     writer = csv.DictWriter(fout, delimiter=',') # your suggestion 
     writer.writerows(user_dict) # your suggestion 
     fout.close()