https://mmbiz.qpic.cn/mmbiz_jpg/SAy0yVjKWywF1B2sqROJSwGqkBTnf3iaCY0NicU3iaflojDougbyrWHezpZkPo7ViaglL4pQgXEANKZGRsts1PA2TQ/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

文 | 豆豆

来源:Python 技术「ID: pythonall」

平时我们在开发程序的时候,总免不了需要造一些假数据来验证自己的程序功能是否正常。那么你是通过什么方式来造假数据的呢,不会每次都是手写「测试数据、test」吧。

今天派森酱给大家介绍两个超级好用的库,批量生成各种假数据,比如用户信息,地址,日期,数字等等。
mimesis

mimesis 是一个高性能的伪数据生成器,目前支持 33 种不同的语言环境。通过该库,我们可以生成各种测试数据、假的 API 接口、任意结构的 JSON 和 XML 数据以及隐藏生产环境的数据。

pip install mimesis

安装好之后我们就可以直接使用了。

from mimesis import Personperson = 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 Fakerfaker = Faker(locale='zh_CN')print(f'name: {faker.name()}')print(f'address: {faker.address()}')print(f'date: {faker.date()}')## 输出结果name: 刘晶address: 香港特别行政区平县华龙深圳路l座 580988date: 2013-08-26

从上图可以看出,faker 目前支持 22 个不同种类的假数据。

如果以上类别不能满足需求,那么 faker 同样支持自定义扩展。

from faker.providers import BaseProviderclass 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)};

总结

今天我们介绍了两款优秀的假数据生成库,对于大部分场景都是可以满足的了,希望小伙伴们能有所收获。

©著作权归作者所有:来自51CTO博客作者mob604756e8ada8的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 小数据、高准确率的文本分类:利用迁移学习创造通用语言模型
  2. 薪资高到没朋友的数据科学职位到底是干啥的?
  3. 个人品牌,我用 Python
  4. 元数据管理—动态表单设计器在crudapi系统中完整实现
  5. PDMan 之数据库逆向解析
  6. 数据资产管理在腾讯游戏的实践
  7. 阿里云Spark Shuffle的优化
  8. 汉森的研究反省:充分利用数据来对经济建模 | 计算机和经济学交叉
  9. 2020年要做的几件大事

随机推荐

  1. Android(安卓)获取系统电量信息
  2. 在 Android 平台上开发 OpenCV
  3. android小功能实现之xml文件解析(Pull)
  4. android listView 显示数据 单击 长按
  5. Android file类使用详解-SDcard
  6. Android应用程序核心-应用程序的基本组件
  7. Ubuntu下android源码下载与编译
  8. Android培训班(40)
  9. Android中关于线程使用的几点注意事项
  10. Android实现View隐藏显示渐变动画