检查输入的国家/地区是否是世界上的国家之一

时间:2016-12-20 15:02:45

标签: python

是否有一种自动方式来检查输入的国家/地区名称是否是python中的世界各国之一(即,是否有自动获取世界上所有国家/地区列表的方式?)

8 个答案:

答案 0 :(得分:1)

你可以这样做:

import requests

req = requests.get('https://raw.githubusercontent.com/Miguel-Frazao/world-data/master/countries_data.json').json()
countries = (i['name'] for i in req)
print(list(countries))

您可以将它们保存到文件中,这样您就不必一直处理请求,或只是复制并粘贴到您的代码中。

然后,要查看该国家/地区是否存在,您可以执行以下操作:

...
country = input('Insert a country')
if country not in countries:
    print('nice try, but invalid')
else:
    print('yooo, your country is {}'.format(country))

如果您需要,您可以获得有关每个国家/地区的更多数据,您可以在代码中请求的链接中进行检查

答案 1 :(得分:1)

尽管这篇文章很旧并且已经得到答复,但我仍然想为提出的问题提供我的解决方案:

我用Python编写了一个函数,该函数可用于找出数据集中出现的不正确的国家/地区名称。

例如:

我们有一个国家名称列表,需要检查以找出无效的国家名称:

[“美利坚合众国”,  “美利坚合众国”,  '英国',  “英国”,  '德国',  '马来西亚',  .... ]

(注意:我已使用函数将列表元素转换为大写形式,以便进行不区分大小写的比较) 此列表的国家/地区名称输入错误/拼写错误:美国未分类的国家/地区,美国。

为识别此类异常,我编写了一个函数,可以识别此类无效的国家/地区名称。

此函数使用Python的“ pycountry”库,其中包含ISO国家名称。它提供两个字母的国家名称,三个字母的国家名称,名称,通用名称,正式名称和数字国家代码。

****功能定义**:**

def country_name_check():
    pycntrylst = list(pc.countries)
    alpha_2 = []
    alpha_3 = []
    name = []
    common_name = []
    official_name = []
    invalid_countrynames =[]
    tobe_deleted = ['IRAN','SOUTH KOREA','NORTH KOREA','SUDAN','MACAU','REPUBLIC OF IRELAND']
    for i in pycntrylst:
        alpha_2.append(i.alpha_2)
        alpha_3.append(i.alpha_3)
        name.append(i.name)
        if hasattr(i, "common_name"):
            common_name.append(i.common_name)
        else:
            common_name.append("")
        if hasattr(i, "official_name"):
            official_name.append(i.official_name)
        else:
            official_name.append("")
    for j in input_country_list:
        if j not in map(str.upper,alpha_2) and j not in map(str.upper,alpha_3) and j not in map(str.upper,name) and j not in map(str.upper,common_name) and j not in map(str.upper,official_name):
            invalid_countrynames.append(j)
    invalid_countrynames = list(set(invalid_countrynames))
    invalid_countrynames = [item for item in invalid_countrynames if item not in tobe_deleted]
    return print(invalid_countrynames)

此功能将输入列表中的国家/地区名称与pycountry.countries提供的以下各项进行比较:

alpha_2:两个字符的国家/地区代码

alpha_3:三个字符的国家/地区代码

名称:国家名称

通用名称:国家/地区的通用名称

官方名称:国家的官方名称

此外,由于我们将上面的每个属性内容都转换为大写,因此进行了比较,因为我们输入的国家/地区名称列表也使用大写字母。

这里要注意的另一件事是,我在函数定义中创建了一个名为“ tobe_deleted”的列表。此列表包含我们在pycountry中具有不同名称版本的那些国家,因此我们不希望这些国家在调用我们的函数时显示为无效的国家/地区名称。

示例:

  1. MACAU也被拼写为MACAO,因此两者都有效。但是,pycountry.countries只有一个条目的拼写为MACAO.country_name_check()可以处理MACAO和MACAU。

  2. 与此类似,pycountry.countries在爱尔兰的条目名称为“ Ireland”。但是,有时它也被称为“爱尔兰共和国”。country_name_check()可以同时处理“爱尔兰”和“爱尔兰共和国”在输入数据集中。

希望此功能可以帮助所有可能在数据分析过程中随时处理数据集中无效国家名称的人。感谢阅读我的帖子以及任何建议和反馈,以改进此功能。

答案 2 :(得分:0)

您可以使用pycountry库获取所有国家/地区的列表:

pip install pycountry 

或者您可以使用此词典:

Country = [
    ('US', 'United States'),
    ('AF', 'Afghanistan'),
    ('AL', 'Albania'),
    ('DZ', 'Algeria'),
    ('AS', 'American Samoa'),
    ('AD', 'Andorra'),
    ('AO', 'Angola'),
    ('AI', 'Anguilla'),
    ('AQ', 'Antarctica'),
    ('AG', 'Antigua And Barbuda'),
    ('AR', 'Argentina'),
    ('AM', 'Armenia'),
    ('AW', 'Aruba'),
    ('AU', 'Australia'),
    ('AT', 'Austria'),
    ('AZ', 'Azerbaijan'),
    ('BS', 'Bahamas'),
    ('BH', 'Bahrain'),
    ('BD', 'Bangladesh'),
    ('BB', 'Barbados'),
    ('BY', 'Belarus'),
    ('BE', 'Belgium'),
    ('BZ', 'Belize'),
    ('BJ', 'Benin'),
    ('BM', 'Bermuda'),
    ('BT', 'Bhutan'),
    ('BO', 'Bolivia'),
    ('BA', 'Bosnia And Herzegowina'),
    ('BW', 'Botswana'),
    ('BV', 'Bouvet Island'),
    ('BR', 'Brazil'),
    ('BN', 'Brunei Darussalam'),
    ('BG', 'Bulgaria'),
    ('BF', 'Burkina Faso'),
    ('BI', 'Burundi'),
    ('KH', 'Cambodia'),
    ('CM', 'Cameroon'),
    ('CA', 'Canada'),
    ('CV', 'Cape Verde'),
    ('KY', 'Cayman Islands'),
    ('CF', 'Central African Rep'),
    ('TD', 'Chad'),
    ('CL', 'Chile'),
    ('CN', 'China'),
    ('CX', 'Christmas Island'),
    ('CC', 'Cocos Islands'),
    ('CO', 'Colombia'),
    ('KM', 'Comoros'),
    ('CG', 'Congo'),
    ('CK', 'Cook Islands'),
    ('CR', 'Costa Rica'),
    ('CI', 'Cote D`ivoire'),
    ('HR', 'Croatia'),
    ('CU', 'Cuba'),
    ('CY', 'Cyprus'),
    ('CZ', 'Czech Republic'),
    ('DK', 'Denmark'),
    ('DJ', 'Djibouti'),
    ('DM', 'Dominica'),
    ('DO', 'Dominican Republic'),
    ('TP', 'East Timor'),
    ('EC', 'Ecuador'),
    ('EG', 'Egypt'),
    ('SV', 'El Salvador'),
    ('GQ', 'Equatorial Guinea'),
    ('ER', 'Eritrea'),
    ('EE', 'Estonia'),
    ('ET', 'Ethiopia'),
    ('FK', 'Falkland Islands (Malvinas)'),
    ('FO', 'Faroe Islands'),
    ('FJ', 'Fiji'),
    ('FI', 'Finland'),
    ('FR', 'France'),
    ('GF', 'French Guiana'),
    ('PF', 'French Polynesia'),
    ('TF', 'French S. Territories'),
    ('GA', 'Gabon'),
    ('GM', 'Gambia'),
    ('GE', 'Georgia'),
    ('DE', 'Germany'),
    ('GH', 'Ghana'),
    ('GI', 'Gibraltar'),
    ('GR', 'Greece'),
    ('GL', 'Greenland'),
    ('GD', 'Grenada'),
    ('GP', 'Guadeloupe'),
    ('GU', 'Guam'),
    ('GT', 'Guatemala'),
    ('GN', 'Guinea'),
    ('GW', 'Guinea-bissau'),
    ('GY', 'Guyana'),
    ('HT', 'Haiti'),
    ('HN', 'Honduras'),
    ('HK', 'Hong Kong'),
    ('HU', 'Hungary'),
    ('IS', 'Iceland'),
    ('IN', 'India'),
    ('ID', 'Indonesia'),
    ('IR', 'Iran'),
    ('IQ', 'Iraq'),
    ('IE', 'Ireland'),
    ('IL', 'Israel'),
    ('IT', 'Italy'),
    ('JM', 'Jamaica'),
    ('JP', 'Japan'),
    ('JO', 'Jordan'),
    ('KZ', 'Kazakhstan'),
    ('KE', 'Kenya'),
    ('KI', 'Kiribati'),
    ('KP', 'Korea (North)'),
    ('KR', 'Korea (South)'),
    ('KW', 'Kuwait'),
    ('KG', 'Kyrgyzstan'),
    ('LA', 'Laos'),
    ('LV', 'Latvia'),
    ('LB', 'Lebanon'),
    ('LS', 'Lesotho'),
    ('LR', 'Liberia'),
    ('LY', 'Libya'),
    ('LI', 'Liechtenstein'),
    ('LT', 'Lithuania'),
    ('LU', 'Luxembourg'),
    ('MO', 'Macau'),
    ('MK', 'Macedonia'),
    ('MG', 'Madagascar'),
    ('MW', 'Malawi'),
    ('MY', 'Malaysia'),
    ('MV', 'Maldives'),
    ('ML', 'Mali'),
    ('MT', 'Malta'),
    ('MH', 'Marshall Islands'),
    ('MQ', 'Martinique'),
    ('MR', 'Mauritania'),
    ('MU', 'Mauritius'),
    ('YT', 'Mayotte'),
    ('MX', 'Mexico'),
    ('FM', 'Micronesia'),
    ('MD', 'Moldova'),
    ('MC', 'Monaco'),
    ('MN', 'Mongolia'),
    ('MS', 'Montserrat'),
    ('MA', 'Morocco'),
    ('MZ', 'Mozambique'),
    ('MM', 'Myanmar'),
    ('NA', 'Namibia'),
    ('NR', 'Nauru'),
    ('NP', 'Nepal'),
    ('NL', 'Netherlands'),
    ('AN', 'Netherlands Antilles'),
    ('NC', 'New Caledonia'),
    ('NZ', 'New Zealand'),
    ('NI', 'Nicaragua'),
    ('NE', 'Niger'),
    ('NG', 'Nigeria'),
    ('NU', 'Niue'),
    ('NF', 'Norfolk Island'),
    ('MP', 'Northern Mariana Islands'),
    ('NO', 'Norway'),
    ('OM', 'Oman'),
    ('PK', 'Pakistan'),
    ('PW', 'Palau'),
    ('PA', 'Panama'),
    ('PG', 'Papua New Guinea'),
    ('PY', 'Paraguay'),
    ('PE', 'Peru'),
    ('PH', 'Philippines'),
    ('PN', 'Pitcairn'),
    ('PL', 'Poland'),
    ('PT', 'Portugal'),
    ('PR', 'Puerto Rico'),
    ('QA', 'Qatar'),
    ('RE', 'Reunion'),
    ('RO', 'Romania'),
    ('RU', 'Russian Federation'),
    ('RW', 'Rwanda'),
    ('KN', 'Saint Kitts And Nevis'),
    ('LC', 'Saint Lucia'),
    ('VC', 'St Vincent/Grenadines'),
    ('WS', 'Samoa'),
    ('SM', 'San Marino'),
    ('ST', 'Sao Tome'),
    ('SA', 'Saudi Arabia'),
    ('SN', 'Senegal'),
    ('SC', 'Seychelles'),
    ('SL', 'Sierra Leone'),
    ('SG', 'Singapore'),
    ('SK', 'Slovakia'),
    ('SI', 'Slovenia'),
    ('SB', 'Solomon Islands'),
    ('SO', 'Somalia'),
    ('ZA', 'South Africa'),
    ('ES', 'Spain'),
    ('LK', 'Sri Lanka'),
    ('SH', 'St. Helena'),
    ('PM', 'St.Pierre'),
    ('SD', 'Sudan'),
    ('SR', 'Suriname'),
    ('SZ', 'Swaziland'),
    ('SE', 'Sweden'),
    ('CH', 'Switzerland'),
    ('SY', 'Syrian Arab Republic'),
    ('TW', 'Taiwan'),
    ('TJ', 'Tajikistan'),
    ('TZ', 'Tanzania'),
    ('TH', 'Thailand'),
    ('TG', 'Togo'),
    ('TK', 'Tokelau'),
    ('TO', 'Tonga'),
    ('TT', 'Trinidad And Tobago'),
    ('TN', 'Tunisia'),
    ('TR', 'Turkey'),
    ('TM', 'Turkmenistan'),
    ('TV', 'Tuvalu'),
    ('UG', 'Uganda'),
    ('UA', 'Ukraine'),
    ('AE', 'United Arab Emirates'),
    ('UK', 'United Kingdom'),
    ('UY', 'Uruguay'),
    ('UZ', 'Uzbekistan'),
    ('VU', 'Vanuatu'),
    ('VA', 'Vatican City State'),
    ('VE', 'Venezuela'),
    ('VN', 'Viet Nam'),
    ('VG', 'Virgin Islands (British)'),
    ('VI', 'Virgin Islands (U.S.)'),
    ('EH', 'Western Sahara'),
    ('YE', 'Yemen'),
    ('YU', 'Yugoslavia'),
    ('ZR', 'Zaire'),
    ('ZM', 'Zambia'),
    ('ZW', 'Zimbabwe')
]

答案 3 :(得分:0)

这是一个粗略的开始,使用从https://www.iso.org/obp/ui/#search收集的国家/地区名称。国名仍然包含一些棘手的案例。例如,此代码识别萨摩亚'但它并没有真正地看到' '美属萨摩亚'。

True
False
True
True
True
True

结果如下:

let range = (start, end) => Array.from(Array(end + 1).keys()).slice(start);

答案 4 :(得分:0)

我知道这个问题已在8个月前提出,但如果您是来自谷歌(就像我一样),这里有一个非常好的解决方案。

您可以使用此处的 ISO标准库: https://pypi.python.org/pypi/iso3166/0.6 这段代码取自该链接,以防您将来某个时间出现404错误:

  

安装:

pip install iso3166
     

国家/地区详情:

>>> from iso3166 import countries
>>> countries.get('us')
Country(name=u'United States', alpha2='US', alpha3='USA', numeric='840')
>>> countries.get('ala')
Country(name=u'\xc5land Islands', alpha2='AX', alpha3='ALA', numeric='248')
>>> countries.get(8)
Country(name=u'Albania', alpha2='AL', alpha3='ALB', numeric='008')
     

国家/地区列表:

>>> from iso3166 import countries
>>> for c in countries:
>>>       print c
Country(name=u'Afghanistan', alpha2='AF', alpha3='AFG', numeric='004')
Country(name=u'\xc5land Islands', alpha2='AX', alpha3='ALA', numeric='248')
Country(name=u'Albania', alpha2='AL', alpha3='ALB', numeric='008')
Country(name=u'Algeria', alpha2='DZ', alpha3='DZA', numeric='012')
...

如果您想要遵循ISO提出的标准化,此软件包是合规的。根据维基百科:

  

ISO 3166是国际标准化组织(ISO)发布的标准,它定义了国家名称,附属地区,地理利益特殊区域及其主要分支(例如省或州)的代码。该标准的正式名称是代表国家及其分支机构名称的代码。

因此,我强烈建议您在所有应用中使用此库,以防您与国家/地区合作。

希望这段数据对社区有用!

答案 5 :(得分:0)

您可以使用pycountry来获取所有其他国家/地区的清单,只需执行以下步骤即可:

pip install pycountry

import pycountry

def get_countries():
    for x in pycountry.countries:
        x.alpha_3 +'  --   '+x.name

它将打印带有国家名称的国家分类代码。

它还有其他字段,您可以通过

进行检查
help(pycountry.countries)

答案 6 :(得分:0)

一个老问题,但是由于它是在我的搜索过程中提出的,没有人提供这种选择,因此我将其添加。

https://github.com/SteinRobert/python-restcountries是REST服务https://restcountries.eu/的python包装器。

包装器似乎已经维护(最近更新为python 3),REST服务由apilayer维护,因此它应该是最新的。

pip install python-restcountries

from restcountries import RestCountryApiV2 as rapi def foo(name): country_list = rapi.get_countries_by_name('France')

答案 7 :(得分:0)

有可能您已经在项目中安装了pytz,例如如果您使用的是Django。

这里是pytz documentation的注释:

Olson数据库随附ISO 3166国家/地区代码到英语国家名称的映射,pytz公开为字典:

>>> print(pytz.country_names['nz'])

New Zealand

因此,使用pytz.country_names字典可能会很方便。

不确定ISO 3166表的最新状态,但是至少pytz本身得到了很好的维护,并且它目前(即2020年6月)在PyPI的“过去一个月下载量最大”的前20名中https://pypistats.org/top认为,就外部依赖而言,这可能不是一件坏事。