0
点赞
收藏
分享

微信扫一扫

Python用faker做假数据生成

司马吹风 2022-04-07 阅读 102

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

举报

相关推荐

0 条评论