做开发的时候常常要模拟一些用户数据,自己编写随机数据虽然也可以,但是如果想要模拟比较复杂的数据,那自己做的话就有些麻烦。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_US
和zh_CN
。
默认的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,它们的功能如下:
最后来一点代码,模拟一些个人数据:
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包含的模拟数据方法和对应的显示,有需要的话可以看看。