什么是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










