我一直在运行一个脚本来对一些地址进行地理编码。我使用了一个输入文件(12行),它工作正常,但当我使用相同格式的另一个输入文件(25行)时,它会抛出此错误,并且生成的输出文件只包含12行: -
Traceback (most recent call last):
File "C:\python_scripts\geocoder_new\geocoder\example_input_and_output\geocoder.py", line 19, in <module>
r = geocode(line)
File "C:\python_scripts\geocoder_new\geocoder\example_input_and_output\geocoder.py", line 8, in geocode
info = json.loads(data).get("results")[0].get("geometry").get("location")
IndexError: list index out of range
代码如下: -
import urllib, json
import csv
def geocode(addr):
url = "http://maps.googleapis.com/maps/api/geocode/json?address=%s&sensor=false" % (urllib.quote(addr.replace(' ', '+')))
data = urllib.urlopen(url).read()
if json.loads(data).get("status") != 'ZERO_RESULTS':
info = json.loads(data).get("results")[0].get("geometry").get("location")
else:
info = {'lat': 'NIL', 'lng': 'NIL'}
return info
fout = open('input2_25.csv', 'w')
fout.write('ADDRESS\tGPS\n')
with open('input2_25', 'r') as f:
for line in f:
r = geocode(line)
gps = ('%s, %s' % (r['lat'], r['lng']))
add = line.strip()
fout.write('\t'.join([line[:-1], gps]))
fout.write('\n')
fout.close()
12行的输入文件: -
Kg Sg Nibong,Lubuk,Semerah,Parit Sulong,Batu Pahat,Johor
Kg Parit Bentong,Spg Kiri,Sri Medan,Parit Sulong,Batu Pahat,Johor
Ldg B-1, Yong Peng,Tg Semberong,Yong Peng,Ayer Hitam,Batu Pahat,Johor
Kg Sri Belahan,Sg Kluang,Rengit,Batu Pahat,Batu Pahat,Johor
Parit Besar,Bagan,Semerah,Parit Sulong,Batu Pahat,Johor
Spg Tiga Bagan,Bagan,Semerah,Parit Sulong,Batu Pahat,Johor
Parit Besar,Bagan,Semerah,Parit Sulong,Batu Pahat,Johor
Parit Selulon,Linau,Parit Yaani,Sri Gading,Batu Pahat,Johor
Parit Khalil,Sri Gading,Semarang,Ayer Hitam,Batu Pahat,Johor
Kg Parit Dalam,Sri Medan,Sri Medan,Parit Sulong,Batu Pahat,Johor
Kg Parit Jatuh,Tg Semberong,Yong Peng,Ayer Hitam,Batu Pahat,Johor
Parit Besar,Bagan,Semerah,Parit Sulong,Batu Pahat,Johor
25行的输入文件: -
LOT PT NO.1769, KAWASAN MIEL, PEDAS HALAL PARK,REMBAU,NEGERI SEMBILAN,
KM 13, KAMPUNG BUKIT TEMBAKAU, UMBAI, 77300 MERLIMAU, MELAKA,JASIN,MELAKA,
RUMAH SEMBELIH SHAH ALAM, JALAN UTAS 15/7, 40630 SHAH ALAM, SELANGOR DARUL EHSAN.,PETALING,SELANGOR
14 JALAN 3 HOUSING TRUST 30250 IPOH PERAK,GOMBAK,SELANGOR
LOT PT NO.1769, KAWASAN MIEL, PEDAS HALAL PARK,REMBAU,NEGERI SEMBILAN,
RUMAH SEMBELIH SHAH ALAM, JALAN UTAS 15/7, 40630 SHAH ALAM. SELANGOR DARUL EHSAN.,PETALING,SELANGOR,
LOT PT NO 1769, KAWASAN MIEL, PEDAS HALAL PARK,REMBAU,NEGERI SEMBILAN,
5629, RUMAH MURAH, JLN KOLAM AIR, 78000 ALOR GAJAH, MELAKA,ALOR GAJAH,MELAKA,
14 JALAN 3 HOUSING TRUST 30250 IPOH PERAK,GOMBAK,SELANGOR
LOT PT NO.1769 KAWASAN MIEL, PEDAS HALAL PARK,REMBAU,NEGERI SEMBILAN,,
LOT PT NO 1769 KAWASAN MIEL PEDAS HALAL PARK,REMBAU,NEGERI SEMBILAN
RUMAH SEMBELIH SHAH ALAM, JALAN UTAS 15/7, 40630 SHAH ALAM, SELANGOR DARUL EHSAN.,PETALING,SELANGOR
LOT PT NO.1769, KAWASAN MIEL, PEDAS HALAL PARK,REMBAU,NEGERI SEMBILAN,
89 tanjong keramat kuala selangor selangor,HULU SELANGOR,SELANGOR
LOT PT NO.1769 KAWASAN MIEL, PEDAS HALAL PARK,REMBAU,NEGERI SEMBILAN,,
PT 11883, DESA CEMPAKA 6/2G, BANDAR BARU NILAI, NEGERI SEMBILAN.,GOMBAK,SELANGOR
LOT 9, KAMPUNG BUKIT MARAK BANGGU, 16150 KOTA BHARU, KELANTAN,KOTA BHARU,KELANTAN
NO.20, JALAN 4/4, PETALING JAYA, SELANGOR,GOMBAK,SELANGOR
33, MAIN ROAD, 43900 SEPANG, SELANGAR. ,HULU SELANGOR,SELANGOR
NO.20, JALAN 4/4, PETALING JAYA, SELANGOR,GOMBAK,SELANGOR
RUMAH SEMBELIH SHAH ALAM, JALAN UTAS 15/7, 40630 SHAH ALAM, SELANGOR DARUL EHSAN.,PETALING,SELANGOR
302-D, TMN BUKIT BARU, BUKIT BERUANG, 75450 MELAKA,MELAKA TENGAH,MELAKA
H.KUAN ENT. KUALA PILAH,NEGERI SEMBILAN,KUALA PILAH,NEGERI SEMBILAN,,
H.KUAN ENT JLN CHANGKAT JERING BT 8,SEGARI PERAK,MANJUNG,PERAK,,
29 LOT 3229 TAMAN BONDA PAYA JARAS DALAM SUNGAI BULOH SELANGOR,PETALING,SELANGOR
输出12行文件: -
ADDRESS GPS
Kg Sg Nibong,Lubuk,Semerah,Parit Sulong,Batu Pahat,Johor NIL, NIL
Kg Parit Bentong,Spg Kiri,Sri Medan,Parit Sulong,Batu Pahat,Johor NIL, NIL
Ldg B-1, Yong Peng,Tg Semberong,Yong Peng,Ayer Hitam,Batu Pahat,Johor NIL, NIL
Kg Sri Belahan,Sg Kluang,Rengit,Batu Pahat,Batu Pahat,Johor NIL, NIL
Parit Besar,Bagan,Semerah,Parit Sulong,Batu Pahat,Johor NIL, NIL
Spg Tiga Bagan,Bagan,Semerah,Parit Sulong,Batu Pahat,Johor NIL, NIL
Parit Besar,Bagan,Semerah,Parit Sulong,Batu Pahat,Johor NIL, NIL
Parit Selulon,Linau,Parit Yaani,Sri Gading,Batu Pahat,Johor NIL, NIL
Parit Khalil,Sri Gading,Semarang,Ayer Hitam,Batu Pahat,Johor NIL, NIL
Kg Parit Dalam,Sri Medan,Sri Medan,Parit Sulong,Batu Pahat,Johor NIL, NIL
Kg Parit Jatuh,Tg Semberong,Yong Peng,Ayer Hitam,Batu Pahat,Johor NIL, NIL
Parit Besar,Bagan,Semerah,Parit Sulong,Batu Pahat,Johor NIL, NIL
25行文件的输出是一个空的csv文件。
我总共有7000个地址来进行地理编码,因此将地址分成12个地址的文件会很麻烦。
非常感谢任何帮助。谢谢!
答案 0 :(得分:0)
这意味着json.loads(data).get("results")
在索引0
上没有项目,即其为空。
尝试使用失败行中的变量请求API网址。很可能google无法找到该地址的坐标
尝试将结果列表放入var中,然后检查它是否为空:
类似的东西:
results = json.loads(data).get("results")
if results:
info = results[0].get("geometry").get("location")
else:
print "no results"