谷歌i18n地址数据库的地址验证帮助程序

google-i18n-address的Python项目详细描述


codecov.ioCircle CIPyPi downloadsrequires.ioPyPi versionPyPi pythonsGitHub

此包包含Google’s i18n address元数据存储库的副本 它包含大量数据,但没有正常运行时间保证。

此包的内容将允许您以编程方式生成地址 符合特定地区或国家规则的表格 本地地址并将其格式化以生成有效的地址标签 交货。

该包还包含一个用于地址验证的python接口。

地址验证

函数normalize_address检查地址并返回 规范格式(适合存储和用于寻址信封)或 引发包含错误列表的InvalidAddress异常。

地址字段

下面是已识别字段的列表:

  • country_code是两个字母的ISO 3166-1国家代码
  • country_area是一个地区、省或州的名称, 公认值包括官方名称、指定缩写, 官方翻译和拉丁语音译
  • city是城市或城镇名称,可识别的值包括正式名称, 官方翻译和拉丁语音译
  • city_area是一个类似于区域的子区域,可识别的值包括 官方名称、官方翻译和拉丁语音译
  • street_address是(可能是多行)街道地址
  • postal_code是邮政编码或邮政编码
  • sorting_code是排序代码
  • name是一个人的名字
  • company_name是公司或组织的名称

错误

仅使用国家/地区代码进行地址验证:

>>>fromi18naddressimportInvalidAddress,normalize_address>>>try:...address=normalize_address({'country_code':'US'})...exceptInvalidAddressase:...print(e.errors)...{'city':'required','country_area':'required','postal_code':'required','street_address':'required'}

地址正确:

>>>fromi18naddressimportnormalize_address>>>address=normalize_address({'country_code':'US','country_area':'California','city':'Mountain View','postal_code':'94043','street_address':'1600 Amphitheatre Pkwy'})>>>print(address){'city':'MOUNTAIN VIEW','city_area':'','country_area':'CA','country_code':'US','postal_code':'94043','sorting_code':'','street_address':'1600 Amphitheatre Pkwy'}

邮政编码/邮政编码验证示例:

>>>fromi18naddressimportInvalidAddress,normalize_address>>>try:...address=normalize_address({...'country_code':'US',...'country_area':'California',...'city':'Mountain View',...'postal_code':'74043',...'street_address':'1600 Amphitheatre Pkwy'})...exceptInvalidAddressase:...print(e.errors)...{'postal_code':'invalid'}

地址拉丁化

在某些情况下,在 可访问格式。您可以使用latinize_address函数来获取 一个地址的更详细、拉丁化的版本。

此版本适用于全文检索索引的显示和使用。 但是规范化的表单应该存储在数据库中,并在 打印地址标签。

>>>fromi18naddressimportlatinize_address>>>address={...'country_code':'CN',...'country_area':'云南省',...'postal_code':'677400',...'city':'临沧市',...'city_area':'凤庆县',...'street_address':'中关村东路1号'}>>>latinize_address(address){'country_code':'CN','country_area':'Yunnan Sheng','city':'Lincang Shi','city_area':'Lincang Shi','sorting_code':'','postal_code':'677400','street_address':'中关村东路1号'}

它还将返回通常使用代码和 美国的州名等缩写:

>>>fromi18naddressimportlatinize_address>>>address={...'country_code':'US',...'country_area':'CA',...'postal_code':'94037',...'city':'Mountain View',...'street_address':'1600 Charleston Rd.'}>>>latinize_address(address){'country_code':'US','country_area':'California','city':'Mountain View','city_area':'','sorting_code':'','postal_code':'94037','street_address':'1600 Charleston Rd.'}

地址格式

您可以使用format_address函数格式化以下地址 目的地国家的邮局规定:

>>>address={...'country_code':'CN',...'country_area':'云南省',...'postal_code':'677400',...'city':'临沧市',...'city_area':'凤庆县',...'street_address':'中关村东路1号'}>>>>print(format_address(address))677400云南省临沧市凤庆县中关村东路1CHINA

您还可以要求拉丁语友好版:

>>>address={...'country_code':'CN',...'country_area':'云南省',...'postal_code':'677400',...'city':'临沧市',...'city_area':'凤庆县',...'street_address':'中关村东路1号'}>>>print(format_address(address,latin=True))中关村东路1凤庆县临沧市云南省,677400CHINA

验证规则

可以使用get_validation_rules函数获取验证数据 有助于构建特定国家的地址表:

>>>fromi18naddressimportget_validation_rules>>>get_validation_rules({'country_code':'US','country_area':'CA'})ValidationRules(country_code='US',country_name='UNITED STATES',address_format='%N%n%O%n%A%n%C, %S %Z',address_latin_format='%N%n%O%n%A%n%C, %S %Z',allowed_fields={'street_address','company_name','city','name','country_area','postal_code'},required_fields={'street_address','city','country_area','postal_code'},upper_fields={'city','country_area'},country_area_type='state',country_area_choices=[('AL','Alabama'),...,('WY','Wyoming')],city_type='city',city_choices=[],city_area_type='suburb',city_area_choices=[],postal_code_type='zip',postal_code_matchers=[re.compile('^(\\d{5})(?:[ \\-](\\d{4}))?$'),re.compile('^9[0-5]|96[01]')],postal_code_examples=['90000','96199'],postal_code_prefix='')

所有已知字段

可以使用KNOWN_FIELDSset将可选地址字段呈现为隐藏 表单元素:

>>fromi18naddressimportget_validation_rules,KNOWN_FIELDS>>rules=get_validation_rules({'country_code':'US'})>>KNOWN_FIELDS-rules.allowed_fields{'city_area','sorting_code'}

原始谷歌i18n数据

所有原始数据都存储在I18nCountryDatadict-like对象中:

>>>fromi18naddressimportI18nCountryData>>>i18n_country_data=I18nCountryData()>>>i18n_country_data['US']{'fmt':'%N%n%O%n%A%n%C, %S %Z','id':'data/US','key':'US','lang':'en','languages':'en','name':'UNITED STATES','posturl':'https://tools.usps.com/go/ZipLookupAction!input.action','require':'ACSZ','state_name_type':'state','sub_keys':'AL~AK~AS~AZ~AR~AA~AE~AP~CA~CO~CT~DE~DC~FL~GA~GU~HI~ID~IL~IN~IA~KS~KY~LA~ME~MH~MD~MA~MI~FM~MN~MS~MO~MT~NE~NV~NH~NJ~NM~NY~NC~ND~MP~OH~OK~OR~PW~PA~PR~RI~SC~SD~TN~TX~UT~VT~VI~VA~WA~WV~WI~WY','sub_names':'Alabama~Alaska~American Samoa~Arizona~Arkansas~Armed Forces (AA)~Armed Forces (AE)~Armed Forces (AP)~California~Colorado~Connecticut~Delaware~District of Columbia~Florida~Georgia~Guam~Hawaii~Idaho~Illinois~Indiana~Iowa~Kansas~Kentucky~Louisiana~Maine~Marshall Islands~Maryland~Massachusetts~Michigan~Micronesia~Minnesota~Mississippi~Missouri~Montana~Nebraska~Nevada~New Hampshire~New Jersey~New Mexico~New York~North Carolina~North Dakota~Northern Mariana Islands~Ohio~Oklahoma~Oregon~Palau~Pennsylvania~Puerto Rico~Rhode Island~South Carolina~South Dakota~Tennessee~Texas~Utah~Vermont~Virgin Islands~Virginia~Washington~West Virginia~Wisconsin~Wyoming','sub_zipexs':'35000,36999~99500,99999~96799~85000,86999~71600,72999~34000,34099~09000,09999~96200,96699~90000,96199~80000,81999~06000,06999~19700,19999~20000,20099:20200,20599:56900,56999~32000,33999:34100,34999~30000,31999:39800,39899:39901~96910,96932~96700,96798:96800,96899~83200,83999~60000,62999~46000,47999~50000,52999~66000,67999~40000,42799~70000,71599~03900,04999~96960,96979~20600,21999~01000,02799:05501:05544~48000,49999~96941,96944~55000,56799~38600,39799~63000,65999~59000,59999~68000,69999~88900,89999~03000,03899~07000,08999~87000,88499~10000,14999:06390:00501:00544~27000,28999~58000,58999~96950,96952~43000,45999~73000,74999~97000,97999~96940~15000,19699~00600,00799:00900,00999~02800,02999~29000,29999~57000,57999~37000,38599~75000,79999:88500,88599:73301:73344~84000,84999~05000,05999~00800,00899~20100,20199:22000,24699~98000,99499~24700,26999~53000,54999~82000,83199:83414','sub_zips':'3[56]~99[5-9]~96799~8[56]~71[6-9]|72~340~09~96[2-6]~9[0-5]|96[01]~8[01]~06~19[7-9]~20[02-5]|569~3[23]|34[1-9]~3[01]|398|39901~969([1-2]\\d|3[12])~967[0-8]|9679[0-8]|968~83[2-9]~6[0-2]~4[67]~5[0-2]~6[67]~4[01]|42[0-7]~70|71[0-5]~039|04~969[67]~20[6-9]|21~01|02[0-7]|05501|05544~4[89]~9694[1-4]~55|56[0-7]~38[6-9]|39[0-7]~6[3-5]~59~6[89]~889|89~03[0-8]~0[78]~87|88[0-4]~1[0-4]|06390|00501|00544~2[78]~58~9695[0-2]~4[3-5]~7[34]~97~969(39|40)~1[5-8]|19[0-6]~00[679]~02[89]~29~57~37|38[0-5]~7[5-9]|885|73301|73344~84~05~008~201|2[23]|24[0-6]~98|99[0-4]~24[7-9]|2[56]~5[34]~82|83[01]|83414','upper':'CS','zip':'(\\d{5})(?:[ \\-](\\d{4}))?','zip_name_type':'zip','zipex':'95014,22162-1010'}>>>i18n_country_data['US/CA']{'id':'data/US/CA','key':'CA','lang':'en','name':'California','zip':'9[0-5]|96[01]','zipex':'90000,96199'}

与django form一起使用

django表单将只返回form.cleaned_datadict中所需的地址字段。因此数据库中的地址将被规范化。

fromdjangoimportformsfromi18naddressimportInvalidAddress,normalize_address,get_validation_rulesclassAddressForm(forms.Form):COUNTRY_CHOICES=[('PL','Poland'),('AE','United Arab Emirates'),('US','United States of America')]ERROR_MESSAGES={'required':'This field is required','invalid':'Enter a valid name'}name=forms.CharField(required=True)company_name=forms.CharField(required=False)street_address=forms.CharField(required=False)city=forms.CharField(required=False)city_area=forms.CharField(required=False)country_code=forms.ChoiceField(required=True,choices=COUNTRY_CHOICES)country_area=forms.CharField(required=False)postal_code=forms.CharField(required=False)defclean(self):clean_data=super(AddressForm,self).clean()validation_rules=get_validation_rules(clean_data)try:valid_address=normalize_address(clean_data)exceptInvalidAddressase:errors=e.errorsvalid_address=Noneforfield,error_codeinerrors.items():iffield=='postal_code':examples=validation_rules.postal_code_examplesmsg='Invalid value, use fomat like %s'%exampleselse:msg=ERROR_MESSAGES[error_code]self.add_error(field,msg)returnvalid_addressorclean_data
https://ga-beacon.appspot.com/UA-10159761-14/mirumee/google-i18n-address?pixel

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为不太可能的场景创建单元测试,值得这么麻烦吗?   java Spock模拟inputStream导致无限循环   java Apache Commons Net POP3与Gmail的连接   如何在eclipse中从另一个java程序执行java程序   右键单击java Multiple selection和JPopMenu   具有两个具有相同Java类和相同完全限定名的不同JAR   为什么我的代码总是出现“java.io.FileNotFoundException”错误?   如何使用Java Stream API有效解析文本文件   Android Studio中单个活动中的java多个日期选择器   java如何为函数编写junit测试用例   java关闭当前窗口并弹出上一个窗口(windowListener)   使用度量API的java Kafka网络度量   java计算对象的“重量”,howto   java我的片段不会显示在我的活动中   java JRE/Eclipse如何决定引用哪个JRE jar   滚动ListView时不维护Edittext的java内容   用于Java/Spring应用程序的facebook用户配置文件登录解决方案   JavaFX创建一个可传递的窗格   java Android:根据两个分隔字符拆分字符串