Get country name from Country code in python?

后端 未结 2 1674
一生所求
一生所求 2021-01-01 22:06

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

相关标签:
2条回答
  • 2021-01-01 22:48

    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'
    
    0 讨论(0)
  • 2021-01-01 22:54

    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'))
    
    0 讨论(0)
提交回复
热议问题