很多同学问:faker地址是虚构的,有没有其他库可以生成地址?有些场景需要真实行政区划、省市区联动,甚至真实街道,下面整理几款常用库,附带简单示例。
1. china-area-data(纯行政区划数据,推荐国内场景)
特点:不是生成器,是国内省/市/区/乡镇静态字典数据源,数据来自国标行政区划,全部真实存在,没有虚构地址。
适合:生成合规的省市区下拉、做测试数据时保证省市区真实联动,缺点没有街道、门牌号。
需要自己搭配随机函数抽取数据。
安装
pip install china-area-data
使用示例
import random
from china_area_data import area_data
# 获取所有省份
provinces = area_data["86"]
province_code, province_name = random.choice(list(provinces.items()))
# 获取该省份下所有城市
cities = area_data[province_code]
city_code, city_name = random.choice(list(cities.items()))
# 获取城市下所有区县
districts = area_data[city_code]
district_code, district_name = random.choice(list(districts.items()))
address = f"{province_name}{city_name}{district_name}"
print(address)
优点:省市区一定真实;缺点:缺少详细街道,需要自己补充街道词库。
2. pypinyin + 本地地址词库(自定义方案)
不属于地址专用库,思路:自己维护一份街道、小区名字列表,配合上面china-area-data,拼接完整地址。
适合高度定制化测试数据,完全可控。
3. geonamescache(全球地理数据)
特点:基于 geonames 开放地理数据库,可以获取全球城市、地区名称,真实地名,支持多国家。
适合:需要海外地址、城市名;国内数据覆盖一般,没有精细区县街道。
安装
pip install geonamescache
示例
import geonamescache import random gc = geonamescache.geonamescache() cities = gc.get_cities() city_info = random.choice(list(cities.values())) print(city_info["name"], city_info["countrycode"])
4. mimesis(对标faker,轻量替代)
mimesis 是 faker 强有力替代品,速度更快,内置多语言地址信息,支持中文。
和faker一样:地址是虚构格式,不是真实存在地址,只是格式合法。
安装
pip install mimesis
中文地址示例
from mimesis import person, address from mimesis.locales import locale address = address(locale.zh_cn) person = person(locale.zh_cn) print(address.province()) print(address.city()) print(address.district()) print(address.address()) print(person.full_name())
优势:性能比faker高,包体积更小;缺点中文精细度略弱于faker。
5. fake2db(直接生成数据库测试数据)
底层封装了faker/mimesis,一键直接往mysql/sqlite等数据库批量插入,支持地址等字段。
适合不想手写循环插入数据库的场景。
pip install fake2db
6. 第三方api方案(非python库,备选)
如果需要真实可校验地址,库基本都做不到,可以调用公开地址api:
- 高德/百度地图开放平台行政区域查询接口(获取真实省市区)
注意:有调用额度限制,大批量测试数据不推荐。
各库对比总结
| 库 | 地址真实性 | 国内支持 | 街道门牌号 | 适用场景 |
|---|---|---|---|---|
| faker | 虚构 | ✅较好 | ✅有 | 快速造测试数据 |
| mimesis | 虚构 | ✅一般 | ✅有 | 高性能mock数据 |
| china-area-data | 真实省市区 | ✅很强 | ❌无 | 省市区联动测试 |
| geonamescache | 真实城市 | ❌弱 | ❌无 | 海外地理数据 |
选型建议
- 只需要省市区真实存在:优先
china-area-data,自己拼接街道词库; - 只要格式对,不需要真实地址:
mimesis可以作为faker平替; - 需要全球地址:geonamescache;
- 大批量直接写入数据库:fake2db。
常见坑提醒
china-area-data只有行政区划,没有街道小区,不能直接生成完整地址;- mimesis/faker 类生成器,地址只是“看起来像”,不能用于地址校验;
- 国内精细街道数据属于资源,没有免费python库自带完整真实街道库。
以上就是python中生成真实地址的6款常用库盘点的详细内容,更多关于python生成真实地址常用库的资料请关注代码网其它相关文章!
发表评论