mimesis
mimesis 是一个高性能的伪数据生成器,目前支持 33 种不同的语言环境。通过该库,我们可以生成各种测试数据、假的 API 接口、任意结构的 JSON 和 XML 数据以及隐藏生产环境的数据。
pip install mimesis
安装好之后我们就可以直接使用了。
from mimesis import Person person = Person('zh') print(f'name: {person.surname() + "" + person.name()}') print(f'sex: {person.sex()}') print(f'academic degree: {person.academic_degree()}') ## 输出结果 name: 田曜岩 sex: 男性 academic degree: 研究生
在上面的程序中,我们创建了一个使用中文环境的 Person 对象,接着输出该用户的姓名,性别以及学历。
下面我们看看 Person 对象里面都有啥假数据。
print('\n'.join(('%s:%s' % item for item in person._data.items())))
结果如下所示:
除了姓名,性别这些基本信息之外还有学历、性取向、大学以及信仰等信息。
另外,除了 Person 之外,mimesis 库还提供了 Address、Food、Datetime 等方面的数据。
address = Address("zh") print(f'continent: {address.continent()}') print(f'province: {address.province()}') print(f'city: {address.city()}') print(f'street name: {address.street_name()}') ## 输出结果 province: 安徽省 city: 湛江市
除了省份,城市之外还有大陆、国家、州、街区等信息。
food = Food("zh") print(f'dish: {food.dish()}') print(f'drink: {food.drink()}') ## 输出结果 dish: 东坡肉 drink: 红茶
除了鱼类和饮料之外还有水果、香料和蔬菜。
其实 mimesis 库的强大不止于此,甚至我们可以使用该库来返回特定格式的数据。这就要借助 mimesis.schema 来实现了。
比如,我们要返回如下格式的 JSON 数据,那么就可以这么写:
_ = Field('zh') schema = Schema(schema=lambda: { 'id': _('uuid'), 'name': _('person.name'), 'version': _('version', pre_release=True), 'timestamp': _('timestamp', posix=False), 'owner': { 'email': _('person.email', domains=['test.com'], key=str.lower), 'token': _('token_hex'), 'creator': _('full_name', gender=Gender.FEMALE) }, 'address': { 'country': _('address.country'), 'province': _('address.province'), 'city': _('address.city') } }) # 生成数据 data = schema.create(iterations=2)
我们借助 Flask 快速实现一个接口:
@app.route('/apps', methods=('GET',)) def apps_view(): count = request.args.get('count', default=1, type=int) data = schema.create(iterations=count) return jsonify(data)
调用该接口获得如下数据:
faker
faker 同样是一个优秀的生成假数据的 Python 库,支持多种语言环境,我们可以使用 pip 进行安装。
pip install faker
试着获取一下姓名,地址,日期等假数据
from faker import Faker faker = Faker(locale='zh_CN') print(f'name: {faker.name()}') print(f'address: {faker.address()}') print(f'date: {faker.date()}') ## 输出结果 name: 刘晶 address: 香港特别行政区平县华龙深圳路l座 580988 date: 2013-08-26
从上图可以看出,faker 目前支持 22 个不同种类的假数据。
如果以上类别不能满足需求,那么 faker 同样支持自定义扩展。
from faker.providers import BaseProvider class MyProvider(BaseProvider): def foo(self): return 'bar' faker.add_provider(MyProvider) print(f'foo: {faker.foo()}') ## 输出结果 foo: bar
最方便的是我们可以直接在命令行调用 faker,这对于某些场景简直不要太方便,比如我们就需要一条用户信息的 JSON 数据,那么就不需要再去写一个 Python 脚本了,直接在命令行调用 faker 命令即可生成假数据。
$ faker address 香港特别行政区六安市海港哈尔滨街z座 561730 $ faker -r=3 address 湖南省海口市清浦王街h座 140394 海南省银川市孝南武汉街q座 623233 青海省建华市萧山李街w座 207439 $ faker -r=3 profile name,address,birthdate {'name': '邵丽', 'address': '四川省想市上街吴街c座 399962', 'birthdate': datetime.date(1979, 8, 28)}; {'name': '张秀华', 'address': '江西省亮市徐汇程街p座 527720', 'birthdate': datetime.date(1907, 6, 27)}; {'name': '王莹', 'address': '江西省博市房山太原路N座 615506', 'birthdate': datetime.date(1968, 2, 7)};
总结
今天我们介绍了两款优秀的假数据生成库,对于大部分场景都是可以满足的了,希望小伙伴们能有所收获。