2016-07-24 3 views
5

Я работал с 2 библиотеками python: phonenumbers, pycountry. Я действительно не мог найти способ дать только код страны и получить соответствующее название страны.Получить название страны из кода страны в python?

В phonenumbers вам необходимо указать полные номера parse. В pycountry он просто получает страну ISO.

Есть ли способ или способ любым способом предоставить код страны библиотеки и получить название страны?

+0

Предположительно, когда вы говорите, код страны, вы имеете в виду Международные телефонные коды. Это правда, или вы на самом деле означаете ISO 3166-1 alpha-2? – erip

+2

Просьба указать [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) –

+0

Посмотрите на 'phonenumberutils.region_codes_for_country_code' –

ответ

15

Библиотека phonenumbers довольно недостаточно документально; вместо этого они советуют вам посмотреть оригинальный проект Google для unittests, чтобы узнать о функциональности.

PhoneNumberUtilTest unittests, кажется, покрывает ваш конкретный прецедент; сопоставление страны номер телефона с данным регионом, с использованием getRegionCodeForCountryCode() function. Существует также getRegionCodeForNumber() function, который, как представляется, сначала извлекает атрибут кода страны для разобранного номера.

И действительно, есть соответствующие phonenumbers.phonenumberutil.region_code_for_country_code() и phonenumbers.phonenumberutil.region_code_for_number() функции, чтобы сделать то же самое в 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)) 

Демо:

>>> 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 

Полученный код региона представляет собой 2-буквенный код ISO, так вы можете использовать это непосредственно в pycountry:

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

Обратите внимание, что атрибут .country_code является только целое, так что вы можете использовать phonenumbers.phonenumberutil.region_code_for_country_code() без номера телефона, только код страны:

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

Спасибо за время и ответ. Как я уже сказал в вопросе, у меня есть код страны, а не номер с кодом страны. Так, например, у меня есть +1 не полный номер. Я знаю, как работать с функцией синтаксического анализа, но проблема в том, что у меня есть только код страны. – ALH

+0

@AlirezaHos: но 'PhoneNumber.country_code' является * просто целым числом *, и это все, что' region_code_for_country_code() 'принимает. Обновлен ответ, чтобы выделить это. –