什么是Faker?
faker是一个Python的第三方库。
主要作用是造假数据。可以造的假数据类型非常多。比如姓名、身份证、手机号、银行卡等等。
Faker的作用
一般用于在研发、测试过程中,生成用户三要素(姓名、手机号、身份证)、构造一批银行卡数据、或生成一批地址通讯录等。
如果不用faker,也可以自己手工生成。但是效率低,明显看起来就是假的。
比如:
张三,18666666666,110222333332222222
李四,18666666661110222333332222223
王五,18666666662,110222333332222224
这些数据没啥意义,而且很容易让程序出错或者无法保证程序的严谨性。
所以,为了简化数据生成过程,以及优质化数据,就引入faker来进行假数据生成。注意:ta生成的东西就是假的,不过是按照规则生成出来的,看起来比较真而已。
Faker安装
他就是个Python包,直接pip安装就行
pip install faker
Faker的使用
1、引入faker,实例化faker对象
2、实例化对象的时候,指定用哪种方式生成。比如用中文(简体)的方式生成、中文(繁体)的方式生成、用英文的方式生成等等。
这里有两种实例化的方法。一个是用Faker一个是用Factory.create。使用locale参数指定用哪种方式生成。
import faker
fake = faker.Faker(locale='zh_CN')
fake1 = faker.Factory.create(locale='zh_CN')
这里介绍几个比较常见的语言代号:
简体中文:zh_CN
繁体中文:zh_TW
美国英文:en_US
英国英文:en_GB
德文:de_DE
日文:ja_JP
韩文:ko_KR
法文:fr_FR
3、对象调用方法即可得到想要的数据
id = fake.ssn()
print(id)
id1 = fake1.ssn()
print(id1)
4、运行结果:
Faker的支持生成的数据:
可以用dir(fake),看Faker库都可以fake哪些数据
1、地理信息类
fake.city_suffix():市,县
fake.country():国家
fake.country_code():国家编码
fake.district():区
fake.geo_coordinate():地理坐标
fake.latitude():地理坐标(纬度)
fake.longitude():地理坐标(经度)
fake.postcode():邮编
fake.province():省份
fake.address():详细地址
fake.street_address():街道地址
fake.street_name():街道名
fake.street_suffix():街、路
2、基础信息类
Python客栈送红包、纸质书
ssn():生成身份证号
bs():随机公司服务名
company():随机公司名(长)
company_prefix():随机公司名(短)
company_suffix():公司性质
credit_card_expire():随机信用卡到期日
credit_card_full():生成完整信用卡信息
credit_card_number():信用卡号
credit_card_provider():信用卡类型
credit_card_security_code():信用卡安全码
job():随机职位
first_name_female():女性名
first_name_male():男性名
last_name_female():女姓
last_name_male():男姓
name():随机生成全名
name_female():男性全名
name_male():女性全名
phone_number():随机生成手机号
phonenumber_prefix():随机生成手机号段
3、计算机基础、Internet信息类
ascii_company_email():随机ASCII公司邮箱名
ascii_email():随机ASCII邮箱:
company_email():
email():
safe_email():安全邮箱
4、网络基础信息类
domain_name():生成域名
domain_word():域词(即,不包含后缀)
ipv4():随机IP4地址
ipv6():随机IP6地址
mac_address():随机MAC地址
tld():网址域名后缀(.com,.net.cn,等等,不包括.)
uri():随机URI地址
uri_extension():网址文件后缀
uri_page():网址文件(不包含后缀)
uri_path():网址文件路径(不包含文件名)
url():随机URL地址
user_name():随机用户名
image_url():随机URL地址
5、浏览器信息类
chrome():随机生成Chrome的浏览器user_agent信息
firefox():随机生成FireFox的浏览器user_agent信息
internet_explorer():随机生成IE的浏览器user_agent信息
opera():随机生成Opera的浏览器user_agent信息
safari():随机生成Safari的浏览器user_agent信息
linux_platform_token():随机Linux信息
user_agent():随机user_agent信息
6、数字类
numerify():三位随机数字
random_digit():0~9随机数
random_digit_not_null():1~9的随机数
random_int():随机数字,默认0~9999,可以通过设置min,max来设置
random_number():随机数字,参数digits设置生成的数字位数
pyfloat():
left_digits=5 #生成的整数位数, right_digits=2 #生成的小数位数, positive=True #是否只有正数
pyint():随机Int数字(参考random_int()参数)
pydecimal():随机Decimal数字(参考pyfloat参数)
7、文本、加密类
pystr():随机字符串
random_element():随机字母
random_letter():随机字母
paragraph():随机生成一个段落
paragraphs():随机生成多个段落
sentence():随机生成一句话
sentences():随机生成多句话,与段落类似
text():随机生成一篇文章
word():随机生成词语
words():随机生成多个词语,用法与段落,句子,类似
binary():随机生成二进制编码
boolean():True/False
language_code():随机生成两位语言编码
locale():随机生成语言/国际 信息
md5():随机生成MD5
null_boolean():NULL/True/False
password():随机生成密码,可选参数:length:密码长度;special_chars:是否能使用特殊字符;digits:是否包含数字;upper_case:是否包含大写字母;lower_case:是否包含小写字母
sha1():随机SHA1
sha256():随机SHA256
uuid4():随机UUID
8、时间信息类
date():随机日期
date_between():随机生成指定范围内日期,参数:start_date,end_date
date_between_dates():随机生成指定范围内日期,用法同上
date_object():随机生产从1970-1-1到指定日期的随机日期。
date_time():随机生成指定时间(1970年1月1日至今)
date_time_ad():生成公元1年到现在的随机时间
date_time_between():用法同dates
future_date():未来日期
future_datetime():未来时间
month():随机月份
month_name():随机月份(英文)
past_date():随机生成已经过去的日期
past_datetime():随机生成已经过去的时间
time():随机24小时时间
timedelta():随机获取时间差
time_object():随机24小时时间,time对象
time_series():随机TimeSeries对象
timezone():随机时区
unix_time():随机Unix时间
year():随机年份
9、python 相关方法
profile():随机生成档案信息
simple_profile():随机生成简单档案信息
pyiterable()
pylist()
pyset()
pystruct()
pytuple()
pydict()
可以用dir(fake),看Faker库都可以fake哪些数据,目前Faker支持近300种数据,此外还支持自己进行扩展。
有了这些生成数据函数之后用fake对象就可以调用不同的方法生成各种数据了。
Faker实战
目标
1:自动生成指定假数据,然后作为附件发送给使用者。(本次只说这个)
2:做成在线功能。(后续实现)
步骤:
1、定义生成假数据的函数。
import faker
import csv
from id_validator import validator
from mail import send_mail_ex2
def fake_date():
fake = faker.Faker(locale='zh_CN')
file = open('data.csv', 'w', newline='', encoding='GBK')
writer = csv.writer(file)
writer.writerow(['姓名', '电话', '身份证', '年龄', '地址', '信用卡', '工作', '邮箱', '公司'])
for i in range(10):
name = fake.name()
phone = "'" + fake.phone_number()
credit_card = "'" + fake.credit_card_number()
job = fake.job()
email = fake.email()
company = fake.company()
id_tmp = fake.ssn()
id = "'" + id_tmp
age = dict(validator.get_info(id_tmp))['age']
addr = dict(validator.get_info(id_tmp))['address']
writer.writerow([name, phone, id, age, addr, credit_card, job, email, company])
file.close()
函数说明:
为了使生成的身份证和年龄和地址信息,一一对应,引入了另一个包:id_validator。他的作用是逆向推导身份证的年龄和地址。
2、发送邮件方法。具体的方法看我之前写的这个:
https://blog.csdn.net/xkukeer/article/details/123818157?spm=1001.2014.3001.5501
def sendmails():
sender_main = 'XX@qq.com'
passwd_main = 'XXXXXXXXXX'# 这个授权码,是在qq邮箱里账户设置里设置的三方授权码。用pop3,就是Python脚本中登录邮箱时的密码,而不是你平时登录邮箱时的那个密码
to_receiver_main = ['XXXXXX@qq.com']
CC_receiver_main = ['XXXXXX@qq.com']
my_sender_name = '假数据生成'
title_main = '假数据已生成,请查收'
content_main = """
您好,这是一封来自假数据生成器的邮件,请查收。
生成的假数据见附件
"""
my_attachment = r'D:\code\练手\fake\data.csv'
send_mail_ex2.sendemail(
sender=sender_main,
sender_name=my_sender_name,
passwd=passwd_main,
to_receiver=to_receiver_main,
cc_receiver=CC_receiver_main,
title=title_main,
content=content_main,
attachment = my_attachment,
att_type='csv'
)
if __name__ == '__main__':
fake_date()
sendmails()
最终效果:
这样,团队里,张三需要假数据的时候,执行一下这个程序,就会给张三人发。
如果觉得需要其他类型的假数据,也可以添加。只要faker支持就行。
后续计划做成在线功能。实现以下几个功能
1、在线提交假数据生成申请
2、填写需要的条数、接受者等信息
3、系统生成数据后,会自动给接受者发送邮件
参考:
https://www.jb51.net/article/201014.htm
https://www.jb51.net/article/239289.htm