import csv
from geopy import geocoders
g = geocoders.Google()
spamReader = csv.reader(open('locations.csv', 'rb'), delimiter='\t', quotechar='|')
for row in spamReader:
a = ', '.join(row)
#print a
place, (lat, lng) = g.geocode(a, exactly_one=False)
print "%s: %.5f, %.5f" % (place, lat, lng)
The data inside locations.csv looks like:
6943 Australia
6944 Australia
6945 Australia
6946 Australia
6947 Australia
6951 Australia
For some reason I am left with a "too many values to unpack" error. The values do print out if I use the commented print statement. Does anyone know why this would be happening?
The problem is the exactly_one
argument to g.geocode
. When I run this in the shell I get:
>>> g.geocode('6943, Australia', exactly_one=False)
[(u'Australia 6943, Villafontana, Tijuana Municipality, Baja California, Mexico',
(32.4988788, -116.8620506)),
(u'Australia 6943, Castelar, Buenos Aires Province, Argentina',
(-34.7036339, -58.6423071)),
(u'Australia 6943, Rosario, Santa Fe Province, Argentina',
(-32.9913482, -60.6398934)),
(u'Australia, Lebanon', (33.8879118, 35.4749439)),
(u'Australia, Juliaca, Peru', (-15.4897806, -70.146677)),
(u'Australia, Lima District 15007, Peru', (-12.0397296, -76.9944836)),
(u'Australia, Manila, Philippines', (14.48538, 121.0394822)),
(u'Australia, Conchal\xed, Santiago Metropolitan Region, Chile',
(-33.3929606, -70.6780826)),
(u'Australia, Chiguayante, Biob\xedo Region, Chile',
(-36.9556346, -73.0145556)),
(u'Australia, Copiap\xf3, Atacama Region, Chile', (-27.3978776, -70.2934656))]
Now, you're trying to break up that big list into just place, (lat, lng)
, when it's actually a list of those; there are too many values
in that list to unpack
into just the two ( place
and (lat, lng)
), since there are actually 10. You could do something like
for place, (lat, lng) in g.geocode(a, exactly_one=False):
print place, lat, lng
or do some other kind of list manipulation or whatever.
g.geocode()
returns a list of nested tuples (place, (lat, lng))
. Just use list comprehension to flatten it in a list of single level tuples (place, lat, lng)
for easier manipulation like this:
data = ((place, lat, lng) for place, (lat, lng) in g.geocode(a, exactly_one=False))
print "\n".join("%s: %.5f, %.5f" % t for t in data)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.