tags:

views:

85

answers:

3

What is the most efficient way one would go about retrieving the U.S. Postal zip code for a street address using Python? Is this something that is even possible?

Preferably, something that includes a local database as oppose to a remote API call of some sort.

Thanks in advance for any help one may be able to offer.

A: 

You can call a geocoding API like Google or Yahoo's. You can use urllib2 to open the URL's and an XML parser to parse the results (Google also sends responses in JSON).

Here's an example API call: Google

I am not sure if there are any readily available databases you could download and use on your server. I also imagine such a service would either be expensive or not accurate/current.

NullUserException
+2  A: 

May be a start: The Zip Code Database Project

ooglemaps – Google Maps and Local Search APIs in Python

GoogleMaps.geocode(query, sensor='false', oe='utf8', ll='', spn='', gl='')

Given a string address query, return a dictionary of information about that location, including its latitude and longitude. Interesting bits:

>>> gmaps = GoogleMaps(api_key)
>>> address = '350 Fifth Avenue New York, NY'
>>> result = gmaps.geocode(address)
>>> placemark = result['Placemark'][0]
>>> lng, lat = placemark['Point']['coordinates'][0:2]
# Note these are backwards from usual
>>> print lat, lng
40.6721118 -73.9838823
>>> details = placemark['AddressDetails']['Country']['AdministrativeArea']
>>> street = details['Locality']['Thoroughfare']['ThoroughfareName']
>>> city = details['Locality']['LocalityName']
>>> state = details['AdministrativeAreaName']
>>> zipcode = details['Locality']['PostalCode']['PostalCodeNumber']
>>> print ', '.join((street, city, state, zipcode))
350 5th Ave, Brooklyn, NY, 11215
Leniel Macaferi
A: 

The USPS updates their database monthly, and using CASS software is the standard method for doing lookups. One source of cheap CASS software is here.

joe snyder