用faker模拟数据

做开发的时候常常要模拟一些用户数据,自己编写随机数据虽然也可以,但是如果想要模拟比较复杂的数据,那自己做的话就有些麻烦。faker正是这样一个类库,让我们能非常简单的模拟数据。本文参考自官方文档,如果有兴趣可以查看官方文档,不过

安装faker

首先先来安装faker:

pip install Faker

简单使用

faker用起来也很简单,初始化一个实例,然后调用对应的方法就可以获得随机数据。

from faker import Faker
fake = Faker()

fake.name()
# 'Lucy Cechtelar'

fake.address()
# '426 Jordy Lodge
#  Cartwrightshire, SC 88120-6700'

默认语言是英文,如果要使用其他语言的随机数据,可以简单的向Faker构造函数传递一个代表区域类型的字符串:

fake = Faker('zh_CN')

官方文档列出了所有可用的区域类型以及对应语言的显示实例,常用的自然是en_USzh_CN

数据提供器(Providers)

默认的faker实例自带的方法并不多,只能模拟一些简单数据,但是faker还提供了一种扩展办法,就是添加数据提供器。提供器是一个继承自faker.providers.BaseProvider的类,如果需要自己编写一些新的随机数据生成方法,就可以用提供器。需要注意提供器的类名必须是Provider

from faker import Faker
import random
from faker.providers import BaseProvider


# 自定义Provider
class Provider(BaseProvider):
    def random_hello(self):
        return random.choice(['hello', 'hi'])


fake = Faker('zh_CN')
fake.add_provider(Provider)

print(fake.random_hello())
# hello或hi

当然除非特殊情况,其实没必要自己编写Provider,因为faker自带了一大堆Provider,基本上能满足99%的需求。官方文档列出了一些自带的Provider以及社区编写的第三方Provider,它们的功能如下:

  • 地址(省、州、市、邮政编码、街道等)
  • 银行流水号
  • 颜色(颜色名称、RGB编码、十六进制编码等)
  • 公司(公司名、公司缩写等)
  • 信用卡(信用卡号、卡全名、签发商等)
  • 货币
  • 日期(日期、上下午、日期和时间、年月日、世纪、时间、生日、时区,周数等等)
  • 文件(文件路径、文件类型和mime类型等)
  • 地理(经纬度、包括国家省市经纬度在内的地理位置)
  • 网络(电子邮箱地址、主机名、网址等等)
  • ISBN
  • 职业
  • lorem(句子和文本)
  • 混杂(语言编码、布尔值、UUID、MD5、SHA256、密码、SHA1、二进制内容等等)
  • 人(性别、姓名、称呼以及区分性别的姓名和称呼等)
  • 电话号码
  • 档案(简单和复杂的个人档案信息)
  • Python(decimal、int、str、bool等Python值)
  • ssn
  • 用户代理(opera、chrome、火狐、safari等浏览器的用户代理)

最后来一点代码,模拟一些个人数据:

from faker import Faker
import random
from pprint import pprint

fake = Faker('zh_CN')

def generate_user():
    return dict(name=fake.name(),
                password=fake.password(length=10),
                company=fake.company(),
                job=fake.job(),
                birthday=fake.date_of_birth(minimum_age=0, maximum_age=120),
                telephone=fake.phone_number(),
                address=fake.address())


users = []
for _ in range(0, 2):
    users.append(generate_user())

pprint(users)

'''
[{'address': '江苏省潮州市黄浦长沙街j座 695574',
  'birthday': datetime.date(1951, 3, 4),
  'company': '兰金电子信息有限公司',
  'job': '软件测试',
  'name': '湛莹',
  'password': 'iUCBVtlj&4',
  'telephone': '13383280861'},
 {'address': '青海省玉市浔阳程街w座 965749',
  'birthday': datetime.date(1972, 1, 17),
  'company': '立信电子信息有限公司',
  'job': '网页设计/制作/美工',
  'name': '羊杨',
  'password': '#gyXVr_(S3',
  'telephone': '13699862129'}]
'''

如果要用到更多类型的数据,还是参考官方文档比较好,这里列出了faker包含的模拟数据方法和对应的显示,有需要的话可以看看。

你可能感兴趣的:(python)