通过 Python 抛出异常从非结构化数据中划分出详细信息 - > 索引错误:列出索引超出范围



我有一个名为"data"的csv文件,在第1列(col.name =地址(中有两个地址:

1.United Kingdom, London, Burlington Gardens, 3
2.United States, Menlo Park, Sand Hill Road, 3000

我正在尝试使用以下代码返回countrypostal_codecitystreet_and_no. 通过使用谷歌地理编码 API 在 csv 文件中。(由于安全原因未提及完整的API密钥(

import requests
import json
import csv
from tqdm import *
def addresses_from_csv(path=None, column=None):
addresses = []
with open(path, 'r') as f:
reader = csv.reader(f)
for row in reader:
addresses.append(row[column])
return addresses
# Get addresses from CSV
addresses = addresses_from_csv(path='C:/Users/kumarso/Documents/BioquellSales/Data.csv', column=0)
# Set Google Maps API key
api_key = 'AIzaSyCm5u6gF2QCccsn'
# Initialize array for transformed addresses
transformed = []
transformed.append(['Country', 'Post code', 'City', 'Street & No'])
for query in tqdm(addresses):
# API call, storing information as JSON
url = 'https://maps.googleapis.com/maps/api/geocode/json?address=' + query + '&lang=en&key=' + api_key
r = requests.get(url)
data = r.json()
#print(data)
# clear all values to avoid appending values from previous iterations a second time
number = street = country = postal_code = city = '' 
# looping over address components in JSON
for component in data['results'][0]['address_components']:
if 'street_number' in component['types']:
number = component['long_name']
elif 'route' in component['types']:
street = component['long_name']
elif 'country' in component['types']:
country = component['long_name']
elif 'postal_code' in component['types']:
postal_code = component['long_name']
elif 'locality' in component['types']:
city = component['long_name']
elif 'postal_town' in component['types']:
city = component['long_name']
else:
continue
street_and_no = street + ' ' + number
transformed.append([country, postal_code, city, street_and_no])
with open('transformed_addresses.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
for row in transformed:
writer.writerow(row)
print('done')

我收到以下错误:

"文件 "c:/ExcelP/Practice.py",第 39 行,在 对于数据中的组件['结果'][0]['address_components']:索引错误:列出索引超出范围">

任何帮助将不胜感激。

加法 :- 在循环地址之前打印结果

{'results': [{'address_components': [{'long_name': 'Munich', 'short_name': 'Munich', 'types': ['locality', 'political']}, {'long_name': 'Upper Bavaria', 'short_name': 'Upper Bavaria', 'types': ['administrative_area_level_2', 'political']}, {'long_name': 'Bavaria', 'short_name': 'BY', 'types': ['administrative_area_level_1', 'political']}, {'long_name': 'Germany', 'short_name': 'DE', 'types': ['country', 'political']}], 'formatted_address': 'Munich, Germany', 'geometry': {'bounds': {'northeast': {'lat': 48.2482197, 'lng': 11.7228755}, 'southwest': {'lat': 48.0616018, 'lng': 11.360796}}, 'location': {'lat': 48.1351253, 'lng': 11.5819805}, 'location_type': 'APPROXIMATE', 'viewport': {'northeast': {'lat': 48.2482197, 'lng': 11.7228755}, 'southwest': {'lat': 48.0616018, 'lng': 11.360796}}}, 'place_id': 'ChIJ2V-Mo_l1nkcRfZixfUq4DAE', 'types': ['locality', 'political']}], 'status': 'OK'}

问题已解决。感谢马西福克斯的提示。必须采取以下措施

1( 确保 CSV 中的数据没有 ASCII 字符。在控制台中打印数据以检查来自 csv 的源是否正确。

2( 确保 API 密钥处于活动状态。

3( 在输出 csv 文件中添加路径。例如,在我的问题中,我输入了"transformed_addresses.csv",但这应该是完整路径。

希望对您有所帮助!

最新更新