Get country name from Country code in python?

时光毁灭记忆、已成空白 提交于 2019-11-30 02:00:54

问题


I have worked with 2 python libraries: phonenumbers, pycountry. I actually could not find a way to give just country code and get its corresponding country name.

In phonenumbers you need to provide full numbers to parse. In pycountry it just get country ISO.

Is there a solution or a method in any way to give the library country code and get country name?


回答1:


The phonenumbers library is rather under-documented; instead they advice you to look at the original Google project for unittests to learn about functionality.

The PhoneNumberUtilTest unittests seems to cover your specific use-case; mapping the country portion of a phone number to a given region, using the getRegionCodeForCountryCode() function. There is also a getRegionCodeForNumber() function that appears to extract the country code attribute of a parsed number first.

And indeed, there are corresponding phonenumbers.phonenumberutil.region_code_for_country_code() and phonenumbers.phonenumberutil.region_code_for_number() functions to do the same in Python:

import phonenumbers
from phonenumbers.phonenumberutil import (
    region_code_for_country_code,
    region_code_for_number,
)

pn = phonenumbers.parse('+442083661177')
print(region_code_for_country_code(pn.country_code))

Demo:

>>> import phonenumbers
>>> from phonenumbers.phonenumberutil import region_code_for_country_code
>>> from phonenumbers.phonenumberutil import region_code_for_number
>>> pn = phonenumbers.parse('+442083661177')
>>> print(region_code_for_country_code(pn.country_code))
GB
>>> print(region_code_for_number(pn))
GB

The resulting region code is a 2-letter ISO code, so you can use that directly in pycountry:

>>> import pycountry
>>> country = pycountry.countries.get(alpha_2=region_code_for_number(pn))
>>> print(country.name)
United Kingdom

Note that the .country_code attribute is just an integer, so you can use phonenumbers.phonenumberutil.region_code_for_country_code() without a phone number, just a country code:

>>> region_code_for_country_code(1)
'US'
>>> region_code_for_country_code(44)
'GB'



回答2:


Small addition - you also can get country prefix by string code. E.g.:

from phonenumbers.phonenumberutil import country_code_for_region

print(country_code_for_region('RU'))
print(country_code_for_region('DE'))


来源:https://stackoverflow.com/questions/38551958/get-country-name-from-country-code-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!