构造假数据利器:Python Faker 库

1,322 阅读4分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

在项目开发、测试的过程中,难免需要一批测试数据来测试代码是否正常运行,这时,就需要我们手动制造一些数据,需要的数据量比较小还好,如果比较大的话,就会很繁复,又容易出错。

而且,手动创造的数据往往都是一些不友好的数据,比如:

测试1, 11111 123456789
测试2, 22222 123456789
测试3, 33333 987654321
...

都是一些无意义的假数据,老实说,我偶尔也这么做。

但是,仔细想一下,这样的测试数据,也太鸡肋了,浪费时间不说,关键是毫无意义。

哎,Python中有个第三方库可以帮助我们解决这个问题,那就是Faker库,使用它可以生成各种各样的看起来像真数据一样的假数据。

我们可以使用pip install Faker命令进行安装。

简单使用

Faker使用起来也非常简单,从faker模块中导入Faker类,然后实例化这个类,就可以调用相关方法使用了。

from faker import Faker


fake = Faker()
name = fake.name()
address = fake.address()
print(name)
print(address)

执行结果如下:

Alicia Miller
3944 Steven Forges
Johnfort, FL 57383

上述代码我们生成了一个名字和一个地址,Faker库默认生成的是英文数据,我们可以使用locale参数指定语言,例如:

from faker import Faker


fake = Faker(locale='zh_CN')
name = fake.name()
address = fake.address()
print(name)
print(address)
张琳
北京市台湾县沈河胡街P座 309525

是不是看起来还不错,就是这个北京市台湾县给我整的猝不及防,其实生成的地址并不是真实的地址,而是随机组合出来的,也就是将省、市、道路之类的随机组合在一起,有出入也正常,不影响使用,还要啥自行车。

当然。还支持其他的语言,部分语言代码如下:

  • 简体中文:zh_CN
  • 繁体中文:zh_TW
  • 美国英文:en_US
  • 英国英文:en_GB
  • 韩文:ko_KR
  • 日文:ja_JP

当然,一般情况下,我们也用不到这些语言。

常用函数

除了上述介绍的fake.name()fake.address()生成姓名和地址的两个函数外,还用很多生成其他信息的方法。

人物信息相关

name():随机生成全名
name_female():男性全名
name_male():女性全名
first_name_female():女性名
first_name_male():男性名
last_name_female():女姓
last_name_male():男姓
ssn():生成身份证号
phone_number():随机生成手机号

地理信息类

fake.country():国家
fake.country_code():国家编码
fake.province():省份
fake.city_suffix():市,县
fake.district():区
fake.street_address():街道地址
fake.street_suffix():街、路
fake.address():详细地址
fake.geo_coordinate():地理坐标
fake.latitude():地理坐标(纬度)
fake.longitude():地理坐标(经度)
fake.postcode():邮编

公司相关

bs():公司服务名
company():公司名
company_prefix():公司名前缀
company_suffix():公司性质

网络信息相关

ascii_company_email():ASCII公司邮箱
ascii_email():ASCII邮箱
company_email():公司邮箱
email():邮箱
safe_email():安全邮箱
domain_name():域名
domain_word():二级域名
ipv4():IPV4地址
ipv6():IPV6地址
mac_address():随机MAC地址
tld():网址域名后缀(.com,.net.cn,等等,不包括.)
uri():随机URI地址
uri_extension():网址文件后缀
uri_page():网址文件(不包含后缀)
uri_path():网址文件路径(不包含文件名)
url():随机URL地址
user_name():随机用户名
image_url():随机URL地址

文本、加密信息类

pystr():字符串
random_element():字母
random_letter():字母
paragraph():单个段落
paragraphs():多个段落
sentence():单个句子
sentences():多个句子
text():文章
word():词语
words():多个词语

编码相关

binary():二进制编码
md5():MD5
password():密码
sha1():SHA1
sha256():SHA256
uuid4():UUID

还有很多很多,不一一列举了,目前Faker支持304种数据,可以用dir(fake)查看Faker库都支持哪些数据的生成。

自定义Faker数据类型

Faker还支持创建自定义的Provider生成数据,如果在Faker库支持的数据类型都不是我们想要的,我们就可以自定义了。

from faker import Faker
from faker.providers import BaseProvider


# 创建自定义Provider
class MyProvider(BaseProvider):
    def my_data_type(self):
        return 'my_data_type'


# 添加Provider
fake = Faker()
fake.add_provider(MyProvider)
print(fake.my_data_type())

总结

上面说到的只是一些常见的数据,Faker库可以生成的数据远不止这些,此外,Faker库的源码也是非常值得研究和学习的,感兴趣的小伙伴可以了解一下啦。

原创不易,如果小伙伴们觉得有帮助,麻烦点个赞再走呗~

最后,感谢女朋友在工作和生活中的包容、理解与支持 !