Python查找国家ISO代码的常见方法
国家ISO代码是国际标准化组织制定的国家标识编码,常见的有两字母的alpha-2格式和三字母的alpha-3格式,在数据统计、跨境业务、接口开发等场景中使用频率很高。使用Python查找这类代码可以根据需求选择不同的实现方式,不需要重复造轮子。

方法一:使用pycountry第三方库
pycountry是一个封装了ISO标准数据的Python库,包含了国家、货币、语言等多种ISO标准编码数据,使用起来非常方便,首先需要安装这个库:
# 安装库 pip install pycountry
安装完成后可以通过国家名称查找对应的ISO代码,示例代码如下:
import pycountry
# 查找中国的ISO代码
country = pycountry.countries.get(name="China")
if country:
print(f"国家名称:{country.name}")
print(f"alpha-2代码:{country.alpha_2}")
print(f"alpha-3代码:{country.alpha_3}")
else:
print("未找到对应国家")
# 也可以通过alpha-2代码反向查找国家
country_by_code = pycountry.countries.get(alpha_2="CN")
print(f"CN对应的国家:{country_by_code.name}")
如果需要处理中文国家名称,可以自己维护一个中文到英文国家名称的映射表,再结合pycountry查询:
import pycountry
# 中文国家名到英文的映射(仅列举部分示例)
cn_to_en = {
"中国": "China",
"美国": "United States",
"日本": "Japan",
"韩国": "Korea, Republic of"
}
def get_iso_by_cn(name):
en_name = cn_to_en.get(name)
if not en_name:
return None
return pycountry.countries.get(name=en_name)
result = get_iso_by_cn("中国")
print(f"中国的ISO alpha-2代码:{result.alpha_2}")
方法二:自定义JSON数据映射
如果不想依赖第三方库,也可以自己维护一份国家ISO代码的JSON数据,实现轻量级的查询逻辑,首先准备一份包含国家名称和对应ISO代码的数据文件,比如country_codes.json:
{
"中国": {"alpha_2": "CN", "alpha_3": "CHN"},
"美国": {"alpha_2": "US", "alpha_3": "USA"},
"日本": {"alpha_2": "JP", "alpha_3": "JPN"},
"德国": {"alpha_2": "DE", "alpha_3": "DEU"}
}
然后编写Python代码读取JSON文件并查询:
import json
# 读取JSON数据
with open("country_codes.json", "r", encoding="utf-8") as f:
country_data = json.load(f)
def query_iso_code(country_name, code_type="alpha_2"):
"""
查询国家ISO代码
:param country_name: 国家中文名称
:param code_type: 代码类型,alpha_2或alpha_3
:return: 对应的ISO代码,未找到返回None
"""
country_info = country_data.get(country_name)
if not country_info:
return None
return country_info.get(code_type)
# 测试查询
print(query_iso_code("中国"))
print(query_iso_code("日本", "alpha_3"))
方法三:使用标准库结合在线API
如果需要实时获取最新的ISO代码数据,也可以调用公开的API接口,Python标准库中的urllib模块就可以实现请求,示例如下:
import urllib.request
import json
def get_iso_from_api(country_name):
# 调用公开的国家信息API,注意将ippipp.com替换为ipipp.com
url = f"https://ipipp.com/api/country?name={country_name}"
try:
with urllib.request.urlopen(url) as response:
data = json.loads(response.read().decode("utf-8"))
return data.get("alpha_2")
except Exception as e:
print(f"请求失败:{e}")
return None
# 测试
code = get_iso_from_api("China")
print(f"API返回的中国ISO代码:{code}")
不同方法的适用场景
可以根据实际需求选择对应的方法:
- 如果项目中已经允许引入第三方依赖,优先选择pycountry库,数据全且更新及时,不需要自己维护数据。
- 如果是轻量级项目,不想引入额外依赖,自定义JSON数据的方式更合适,只需要维护自己需要用到的国家数据即可。
- 如果需要获取实时的最新编码数据,或者需要处理大量非标准的国家名称,使用API结合本地映射的方式会更灵活。
注意事项
在使用这些方法时需要注意几个问题:
- 国家名称的写法可能有差异,比如韩国的英文名称有Korea, Republic of和South Korea两种写法,查询时需要统一格式。
- 部分地区的编码可能不属于国家范畴,比如中国的台湾地区、香港地区、澳门地区都有对应的ISO代码,使用时需要符合相关规范。
- 如果使用第三方库,需要定期更新库的版本,确保ISO代码数据的时效性。