2016-07-24 23 views
5

Ich habe mit 2 Python-Bibliotheken gearbeitet: phonenumbers, pycountry. Ich konnte tatsächlich keinen Weg finden, nur Ländercode zu geben und den entsprechenden Ländernamen zu erhalten.Ländername von Ländercode in Python erhalten?

In phonenumbers müssen Sie die vollständigen Nummern parse angeben. In pycountry es nur Land ISO erhalten.

Gibt es in irgendeiner Weise eine Lösung oder eine Methode, um der Bibliothek den Ländercode zu geben und den Ländernamen zu erhalten?

+0

Vermutlich, wenn Sie Landesvorwahl sagen, Sie meinen internationalen Anruf Codes. Ist das wahr, oder meinst du eigentlich ISO 3166-1 alpha-2? – erip

+2

Bitte geben Sie ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) –

+0

Werfen Sie einen Blick auf 'phonenumberutils.region_codes_for_country_code' –

Antwort

15

Die phonenumbers Bibliothek ist eher unter dokumentiert; Stattdessen raten wir Ihnen, sich das ursprüngliche Google-Projekt für Unittests anzusehen, um mehr über Funktionalität zu erfahren.

Die PhoneNumberUtilTest unittests scheint Ihren spezifischen Anwendungsfall abzudecken; Zuordnung des Landteils einer Telefonnummer zu einer bestimmten Region unter Verwendung der getRegionCodeForCountryCode() function. Es gibt auch eine getRegionCodeForNumber() function, die das Ländercode-Attribut einer geparsten Nummer zuerst zu extrahieren scheint.

Und in der Tat gibt es entsprechende phonenumbers.phonenumberutil.region_code_for_country_code() und phonenumbers.phonenumberutil.region_code_for_number() Funktionen das gleiche in Python zu tun:

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 

Der resultierende Regionalcode ist ein 2-stelliger ISO-Code, so Sie können das direkt in verwenden:

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

Beachten Sie, dass das .country_code Attribut ist nur eine ganze Zahl, so dass Sie phonenumbers.phonenumberutil.region_code_for_country_code() ohne eine Telefonnummer, nur einen Ländercode verwenden:

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

Danke für die Zeit und die Antwort. Wie ich in der Frage gesagt habe, habe ich nur die Landesvorwahl nicht die Nummer mit Landesvorwahl. Also zum Beispiel habe ich +1 nicht die volle Nummer. Ich weiß, wie man mit Parse-Funktion arbeitet, aber das Problem ist, dass ich nur den Ländercode habe. – ALH

+0

@ AlirezaHos: aber 'PhoneNumber.country_code' ist * nur eine Ganzzahl *, und das ist alles, was' region_code_for_country_code() 'braucht. Die Antwort wurde aktualisiert, um dies hervorzuheben. –