0
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)

location.csv内のデータは次のようになります。

6943     Australia
6944     Australia
6945     Australia
6946     Australia
6947     Australia
6951     Australia

何らかの理由で、「解凍するには値が多すぎます」というエラーが残ります。コメント付きのprintステートメントを使用すると、値が出力されます。なぜこれが起こるのか誰かが知っていますか?

4

2 に答える 2

1

g.geocode()ネストされたタプルのリストを返します(place, (lat, lng))。リスト内包表記を使用して、単一レベルのタプルのリスト(place, lat, lng)でフラット化し、次のように簡単に操作できるようにします。

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)
于 2012-05-27T06:24:18.577 に答える
1

問題は へのexactly_one引数g.geocodeです。これをシェルで実行すると、次のようになります。

 >>> 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))]

place, (lat, lng)さて、実際にはそれらのリストであるときに、その大きなリストをちょうどに分割しようとしています。実際には10あるのでtoo many values、そのリストto unpackには2つの(place(lat, lng))だけがあります。次のようなことができます

for place, (lat, lng) in g.geocode(a, exactly_one=False):
     print place, lat, lng

または、他の種類のリスト操作などを行います。

于 2012-05-27T05:33:15.000 に答える