>>> 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提出的标准化,则此软件包是兼容的。根据Wikipedia: ISO 3166是由国际标准化组织(ISO)发布的标准,定义了国家名称、附属领土、特殊地理区域及其主要细分(例如省或州)的代码。该标准的正式名称是“国家及其分区名称表示代码”。 因此,我强烈建议您在所有应用程序中使用此库,以防您使用国家/地区。 希望这份资料对社会有用!
虽然这篇文章已经很老了,而且已经有人回答了,但我仍然想对这个问题提出我的解决方案: 我用Python写了一个函数,可以用来找出数据集中不正确的国家名称。 例如: 我们有一个国家名称列表,希望检查以找出无效的国家名称: ['UNITED STATES OF AMERICA','UNITED STATES OF AMERICA',' UNITED KINGDOM','UNTED KINGDOM',' GERMANY','MALAYSIA',....] (Note:我已经使用我的函数将列表元素转换为大写,以便进行不区分大小写的比较)此列表中的国家名称条目不正确/拼写错误,例如:美利坚合众国,联合 Realm 。 为了识别这种异常情况,我编写了一个函数,可以识别这种无效的国家名称。 此函数使用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:三字符国家代码 name:国家名称 通用名称:国家的通用名称 官方名称:国家的正式名称 此外,由于我们输入的国家名称列表也是大写的,因此通过将上述每个属性内容转换为大写来进行比较。 这里需要注意的另一件事是,我在函数定义中创建了一个名为'tobe_deleted'的列表。这个列表包含了我们在pycountry中使用不同版本的名称的国家,因此我们不希望这些国家在调用函数时显示为无效的国家名称。 示例: 1.澳门也拼写为MACAO,因此两者都有效。但是,pycountry.countries只有一个拼写为MACAO.country_name_check()的条目可以处理MACAO和MACAU。 1.类似地,pycountry.countries有name ='Ireland'的爱尔兰条目。然而,它有时也被称为'Republic of Ireland'。country_name_check()可以处理输入数据集中的'Ireland'和'Republic of Ireland'。 我希望这个功能可以帮助所有在数据分析过程中可能遇到处理数据集中无效国家名称问题的人。感谢您阅读我的帖子,欢迎您提出任何建议和反馈以改进此功能。
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))
9条答案
按热度按时间2w3kk1z51#
我知道8个月前有人问过这个问题,但如果你来自谷歌(就像我一样),这里有一个很好的解决方案。
您可以使用位于此处的ISO标准库:https://pypi.python.org/pypi/iso3166/
这段代码取自该链接,以防您在将来某个时候收到404错误:
安装:
国家详细信息:
国家列表:
如果您希望遵循ISO提出的标准化,则此软件包是兼容的。根据Wikipedia:
ISO 3166是由国际标准化组织(ISO)发布的标准,定义了国家名称、附属领土、特殊地理区域及其主要细分(例如省或州)的代码。该标准的正式名称是“国家及其分区名称表示代码”。
因此,我强烈建议您在所有应用程序中使用此库,以防您使用国家/地区。
希望这份资料对社会有用!
v09wglhw2#
更新
虽然使用
pytz.country_names
很方便,但看起来pytz
就是on the way out(从Python 3.9开始)。作为替代,Python的(first-party)
tzdata
包提供了ISO 3166国家代码和名称的最新列表。要使用来自
tzdata
的国家名称,请查看this example。原件
很有可能你已经在你的项目中安装了
pytz
,例如。如果你使用Django下面是
pytz
文档中的一条注解:Olson数据库附带了一个ISO 3166国家代码到英语国家名称的Map,
pytz
将其作为字典公开:>>> print(pytz.country_names['nz'])
New Zealand
因此,使用
pytz.country_names
字典可能会很方便。不知道ISO 3166表的更新情况如何,但至少
pytz
本身维护得很好,而且它目前(即根据https://pypistats.org/top的数据,2020年6月)在PyPI的“上个月下载量最多”的前20名中,所以就外部依赖而言,这可能不是一个糟糕的选择。5lhxktic3#
虽然这篇文章已经很老了,而且已经有人回答了,但我仍然想对这个问题提出我的解决方案:
我用Python写了一个函数,可以用来找出数据集中不正确的国家名称。
例如:
我们有一个国家名称列表,希望检查以找出无效的国家名称:
['UNITED STATES OF AMERICA','UNITED STATES OF AMERICA',' UNITED KINGDOM','UNTED KINGDOM',' GERMANY','MALAYSIA',....]
(Note:我已经使用我的函数将列表元素转换为大写,以便进行不区分大小写的比较)此列表中的国家名称条目不正确/拼写错误,例如:美利坚合众国,联合 Realm 。
为了识别这种异常情况,我编写了一个函数,可以识别这种无效的国家名称。
此函数使用Python的'pycountry'库,其中包含ISO国家名称。它提供了两个字母的国家名称,三个字母的国家名称,名称,通用名称,官方名称和数字国家代码。
函数定义:
)
此函数将输入列表中的国家名称与pycountry.countries提供的以下各项进行比较:
alpha_2:两个字符的国家代码
alpha_3:三字符国家代码
name:国家名称
通用名称:国家的通用名称
官方名称:国家的正式名称
此外,由于我们输入的国家名称列表也是大写的,因此通过将上述每个属性内容转换为大写来进行比较。
这里需要注意的另一件事是,我在函数定义中创建了一个名为'tobe_deleted'的列表。这个列表包含了我们在pycountry中使用不同版本的名称的国家,因此我们不希望这些国家在调用函数时显示为无效的国家名称。
示例:
1.澳门也拼写为MACAO,因此两者都有效。但是,pycountry.countries只有一个拼写为MACAO.country_name_check()的条目可以处理MACAO和MACAU。
1.类似地,pycountry.countries有name ='Ireland'的爱尔兰条目。然而,它有时也被称为'Republic of Ireland'。country_name_check()可以处理输入数据集中的'Ireland'和'Republic of Ireland'。
我希望这个功能可以帮助所有在数据分析过程中可能遇到处理数据集中无效国家名称问题的人。感谢您阅读我的帖子,欢迎您提出任何建议和反馈以改进此功能。
tyky79it4#
您可以使用pycountry来获取所有国家的列表,还有许多其他选项,只需按照以下步骤操作:
它将打印带有国家名称的国家排序代码。
它有其他字段,您可以检查它
euoag5mw5#
你可以这样做:
您可以将它们保存到一个文件中,这样您就不必一直执行请求,或者只是复制并粘贴到代码中。
然后,要检查国家是否存在,您可以执行以下操作:
你有更多的数据,每个国家的情况下,你需要它,你可以检查它的链接,正在要求在代码
u4dcyp6a6#
这是一个粗略的开始,使用从www.example.com收集的国家名称https://www.iso.org/obp/ui/#search。国家名称仍然包含一些棘手的情况。例如,这个代码识别“萨摩亚”,但它并没有真正“看到”“美属萨摩亚”。
结果如下:
3lxsmp7m7#
老问题,但因为它出现在我的搜索和没有人提供这个替代我会添加它。
https://github.com/SteinRobert/python-restcountries是REST服务https://restcountries.eu/的Python Package 器。
Package 器似乎被维护(最近更新到python3),REST服务由apilayer维护,因此它应该是最新的。
pip install python-restcountries
from restcountries import RestCountryApiV2 as rapi def foo(name): country_list = rapi.get_countries_by_name('France')
2o7dmzc58#
如果你需要检查一个给定的字符串是否是世界上的一个国家,以前的评论者建议使用
pycountry
。然而,pycountry
以速度慢而闻名,并且只支持英语国家名称。要获得更高效的解决方案,您可能需要考虑使用countrywrangler
,它使用性能优化的方法并支持34种语言的搜索,包括官方和常见的国家名称。countrywrangler
包括一个模糊搜索功能,它比pycountry
的常规查找快,但仍然比它的正常搜索功能慢大约100倍。模糊搜索功能能够检测几乎所有国家,无论格式样式或拼写错误的变化。但是,对于大多数用例,countrywrangler
的正常搜索功能就足够了。下面是一个不使用模糊搜索功能检查给定字符串是否代表国家的示例用例:
还有一个开启了模糊搜索:
当
countrywrangler
无法找到给定字符串的匹配时,它会自动返回None。如果目标仅是确定给定字符串是否表示国家,则可以使用以下代码:countrywrangler
可以使用以下pip命令安装:完整的文档可以在这里找到:https://countrywrangler.readthedocs.io/en/latest/normalize/country_name/
**披露:**我是CountryWrangler的作者。虽然
pycountry
主要是作为ISO标准的数据库而设计的,但countrywrangler
是专门为规范国家数据而开发的。这两个库都满足各自的用例。tgabmvqs9#
你可以使用pycountry来获取所有国家的列表:
你可以使用这个字典:
2021年更新:该模块已更新,包括@JurajBezručka提到的缺点