lightweight python library to query city/state name by zip code?

前端 未结 4 909
孤城傲影
孤城傲影 2021-02-14 08:20

Pretty simple here, I\'m looking for a lightweight library that will allow me to lookup a city/state pairing for a given zip code. I am using django FWIW. Thanks in advance.

相关标签:
4条回答
  • 2021-02-14 08:43

    Try pyzipcode. An example from the home page:

    >>> from pyzipcode import ZipCodeDatabase
    >>> zcdb = ZipCodeDatabase()
    >>> zipcode = zcdb[54115]
    >>> zipcode.zip
    u'54115'
    >>> zipcode.city
    u'De Pere'
    >>> zipcode.state
    u'WI'
    >>> zipcode.longitude
    -88.078959999999995
    >>> zipcode.latitude
    44.42042
    >>> zipcode.timezone
    -6
    
    0 讨论(0)
  • 2021-02-14 08:51

    Use this library uszipcode.

    Advantages:

    • Data is up-to-date, super rich info, way richer and more up-to-date than zipcode and pyzipcode and any other python zipcode library.
    • Query is super easy, and there are like 20+ built-in query pattern you can use. And you can customize your query anyway you want.
    • Support fuzzy string match for city and state. You don't need to use the exact name.
    >>> from uszipcode import ZipcodeSearchEngine
    >>> search = ZipcodeSearchEngine()
    >>> zipcode = search.by_zipcode("10001")
    >>> print(zipcode)
    {
        "City": "New York", 
        "Density": 34035.48387096774, 
        "HouseOfUnits": 12476, 
        "LandArea": 0.62, 
        "Latitude": 40.75368539999999, 
        "Longitude": -73.9991637, 
        "NEBoundLatitude": 40.8282129, 
        "NEBoundLongitude": -73.9321059, 
        "Population": 21102, 
        "SWBoundLatitude": 40.743451, 
        "SWBoungLongitude": -74.00794499999998, 
        "State": "NY", 
        "TotalWages": 1031960117.0, 
        "WaterArea": 0.0, 
        "Wealthy": 48903.42702113544, 
        "Zipcode": "10001", 
        "ZipcodeType": "Standard"
    }
    
    # fuzzy city, state search, case insensitive, spelling mistake tolerant
    # all zipcode in new york
    >>> result = search.by_city_and_state(city="newyork", state="NY")
    >>> search.export_to_csv(result, "result.csv")
    

    Very easy to use to build advance search

    >>> result = search.find(city="new york", 
    ... wealthy=100000, sort_by="Wealthy", ascending=False, returns=10)
    
    0 讨论(0)
  • 2021-02-14 08:55

    I built Zipcodes to remove the dependency on SQLite that all other zipcode libraries had. SQLite is not available in an AWS Lambda environment, so this library provides a lightweight, powerful querying interface over a gzipped JSON file containing U.S. zipcode data. Below are some examples:

    Matching:

    >>> # Handles of Zip+4 zip-codes nicely. :)
    >>> pprint(zipcodes.matching('77429-1145'))
    [{'zip_code': '77429',
      'zip_code_type': 'STANDARD',
      'city': 'CYPRESS',
      'state': 'TX',
      'lat': 29.96,
      'long': -95.69,
      'world_region': 'NA',
      'country': 'US',
      'active': True}]
    

    Validity:

    >>> # Whether the zip-code exists within the database.
    >>> print(zipcodes.is_valid('06463'))
    False
    

    Similarity:

    >>> # Search for zipcodes that begin with a pattern.
    >>> pprint(zipcodes.similar_to('0643'))
    [{'active': True,
      'city': 'GUILFORD',
      'country': 'US',
      'lat': 41.28,
      'long': -72.67,
      'state': 'CT',
      'world_region': 'NA',
      'zip_code': '06437',
      'zip_code_type': 'STANDARD'},
     {'active': True,
      'city': 'HADDAM',
      'country': 'US',
      'lat': 41.45,
      'long': -72.5,
      'state': 'CT',
      'world_region': 'NA',
      'zip_code': '06438',
      'zip_code_type': 'STANDARD'},
    ... # remaining results truncated for readability...
    ]
    

    Advanced filtering:

    >>> # Arbitrary nesting of similar_to and filter_by calls, allowing for great precision while filtering.
    >>> pprint(zipcodes.similar_to('2', zips=zipcodes.filter_by(zipcodes.list_all(), active=True, city='WINDSOR')))
    [{'active': True,
      'city': 'WINDSOR',
      'country': 'US',
      'lat': 33.48,
      'long': -81.51,
      'state': 'SC',
      'world_region': 'NA',
      'zip_code': '29856',
      'zip_code_type': 'STANDARD'},
     {'active': True,
      'city': 'WINDSOR',
      'country': 'US',
      'lat': 36.8,
      'long': -76.73,
      'state': 'VA',
      'world_region': 'NA',
      'zip_code': '23487',
      'zip_code_type': 'STANDARD'},
     {'active': True,
      'city': 'WINDSOR',
      'country': 'US',
      'lat': 36.0,
      'long': -76.94,
      'state': 'NC',
      'world_region': 'NA',
      'zip_code': '27983',
      'zip_code_type': 'STANDARD'}]
    
    0 讨论(0)
  • 2021-02-14 08:56

    The latest version of pyzipcode on PYPI is vulnerable to SQL injection, so it's probably better to use this fork, which seems to have fixed the problems.

    0 讨论(0)
提交回复
热议问题