2015-04-20 179 views
3

是否可以使用python-phonenumbers或另一個python lib從兩個字母的國家代碼(ISO 3166-1 alpha-2)獲取國家代碼?從python的國家代碼中獲取電話號碼的國際前綴

phonenumbers LIB重點從數量提取國家代碼的例子,但我想反其道而行之,是這樣的:

"US" -> "1" "GB" -> "44" "CL" -> "56"

+0

你可以看看通過解析表來創建一個字典在下面的頁面中,儘管您必須從國家字母代碼列中切出前兩個字符 - https://countrycode.org/ – thefragileomen

+0

如果您查看以下頁面上的__Example Usage__:[link](https:// github .com/daviddrysdale/python-phonenumbers)你可以看到一些例子,解析和國家代碼給出了電話號碼 – sshashank124

+0

這不是一個真正的編程問題。這是一個資源問題。你可以解析維基百科http://en.wikipedia.org/wiki/List_of_country_calling_codes http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 –

回答

5

我不知道這個任何python lib,但是here'sa csv與所有ISO 3166-1 alpha-2代碼和它們的數字前綴,從它那裏查看它應該是微不足道的:

import csv 

country_to_prefix = {} 

with open("countrylist.csv") as csvfile: 
    reader = csv.DictReader(csvfile) 
    for row in reader: 
     country_to_prefix[row["ISO 3166-1 2 Letter Code"]] = row["ITU-T Telephone Code"] 

print country_to_prefix["US"] # +1 
print country_to_prefix["GB"] # +44 
print country_to_prefix["CL"] # +56 

編輯:上述鏈接已經關閉,但我在Github上找到repository with that data (and more)

+0

非常好,謝謝! – Matt

+0

但它確實表現不佳。 – Zagfai

+0

該鏈接不再有效,因爲該域名無法再解析。 – Anthon

2

使用lib。

In [1]: from phonenumbers import COUNTRY_CODE_TO_REGION_CODE 

In [2]: COUNTRY_CODE_TO_REGION_CODE 
Out[2]: 
{1: ('US', 
    'AG', 
    'AI', 

.... 
7: ('RU', 'KZ'), 
20: ('EG',), 
27: ('ZA',), 
30: ('GR',), 
31: ('NL',), 
32: ('BE',), 
33: ('FR',), 
34: ('ES',), 
36: ('HU',), 
39: ('IT', 'VA'), 
40: ('RO',), 
... snip. 

最後:

from phonenumbers import COUNTRY_CODE_TO_REGION_CODE, REGION_CODE_FOR_NON_GEO_ENTITY 
REGION_CODE_TO_COUNTRY_CODE = {} 

for country_code, region_codes in COUNTRY_CODE_TO_REGION_CODE.items(): 
    for region_code in region_codes: 
    if region_code == REGION_CODE_FOR_NON_GEO_ENTITY: 
     continue 
    if region_code in REGION_CODE_TO_COUNTRY_CODE: 
     raise ValueError("%r is already in the country code list" % region_code) 
    REGION_CODE_TO_COUNTRY_CODE[region_code] = str(country_code) 

以下功能會給你從提供的ISO代碼調用代碼:

def get_calling_code(iso): 
    for code, isos in COUNTRY_CODE_TO_REGION_CODE.items(): 
    if iso.upper() in isos: 
     return code 
    return None 

它給你:

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