Python受欢迎的原因之一就是其计算生态丰富,据不完全统计,Python 目前为止有约13万+的第三方库。
本系列将会陆续整理分享一些有趣、有用的第三方库。
-
通过百度网盘获取:
链接:https://pan.baidu.com/s/1FSGLd7aI_UQlCQuovVHc_Q?pwd=mnsj
提取码:mnsj
-
前往GitHub获取:
https://github.com/returu/Python_Ecosystem
-
数据类型丰富:可以生成姓名、地址、电话号码、电子邮件、日期、文本、信用卡信息等多种虚拟数据。 -
多语言支持:支持多种语言和文化背景的数据生成,例如中文(zh_CN)、英文(en_US)、日文(ja_JP)等。 -
自定义数据生成规则:允许用户创建自定义Providers,以生成特定类型的虚拟数据。 -
设置随机种子:通过设置随机种子,可以确保每次生成的数据相同,便于测试。
pip install Faker
https://github.com/joke2k/faker
-
命令行用法:
faker [-h] [--version] [-o output]
[-l {bg_BG,cs_CZ,...,zh_CN,zh_TW}]
[-r REPEAT] [-s SEP]
[-i {package.containing.custom_provider otherpkg.containing.custom_provider}]
[fake] [fake argument [fake argument ...]]
-
faker:安装后可以使用的脚本,在开发可以使用python -m faker代替。 -
-h,–help:显示帮助信息。 -
–version:显示程序的版本号。 -
-o FILENAME:将输出重定向到指定的文件名。 -
-l {bg_BG,cs_CZ,…,zh_CN,zh_TW}:允许使用本地化Providers。 -
-r REPEAT:将生成指定数量的输出。 -
-s SEP:将在每次生成的输出后生成指定的分隔符。 -
-i {my.custom_provider other.custom_provider}:要使用的额外自定义Provider的列表。 -
fake:是要生成输出的假数据的名称,例如name、address或text。 -
[fake argument …]:传递给假数据的可选参数(例如,profile假数据接受一个可选的以逗号分隔的字段名称列表作为第一个参数)。
C:UsersXX>faker name
Amy Brandt
C:UsersXX>faker -l zh_CN name
李荣
C:UsersXX>faker -l zh_CN -r=3 name
田晨
张秀荣
孙芳
C:UsersXX>faker profile ssn,birthdate
{'ssn': '341-17-7751', 'birthdate': datetime.date(2017, 3, 20)}
-
作为Python库:
-
使用faker.Faker()创建并初始化一个faker生成器;
-
通过访问以所需数据类型命名的属性来生成数据。
from faker import Faker
# 创建一个 Faker 实例,指定语言为中文
fake = Faker('zh_CN')
# 生成虚拟数据
print("姓名:", fake.name()) # 生成随机姓名
print("地址:", fake.address()) # 生成随机地址
print("电子邮件:", fake.email()) # 生成随机电子邮件
print("电话号码:", fake.phone_number()) # 生成随机电话号码
print("日期:", fake.date()) # 生成随机日期
print("句子:", fake.sentence()) # 生成随机句子
print("段落:", fake.paragraph()) # 生成随机段落
print("文本:", fake.text()) # 生成随机段落
支持全部的数据类型可以查看官方文档。
-
3.1 Providers:
每个生成器属性(如name、address)都被称为“假数据生成器”。一个faker生成器有许多这样的假数据生成器,它们被打包在Providers中。
from faker import Faker
# 导入 phone_number 模块,用于生成与电话号码相关的内容
from faker.providers import phone_number
fake = Faker()
fake.add_provider(phone_number)
# 生成国家的国际电话区号
print(fake.country_calling_code())
# 输出:+243
-
自定义providers:
可以通过继承BaseProvider
创建自定义Provider类,添加新的生成方法。
# 导入一个Provider或使用默认的Provider
from faker.providers import BaseProvider
# 创建一个新的Provider类
class CustomProvider(BaseProvider):
def product_name(self):
products = ["A", "B", "C", "D"]
return self.random_element(products)
fake = Faker()
# 将新的Provider添加到 faker 实例中
fake.add_provider(CustomProvider)
# 使用
print("虚拟产品名称:", fake.product_name())
# 输出:虚拟产品名称: C
-
创建动态Provider:
from faker import Faker
from faker.providers import DynamicProvider
# 创建一个动态Provider
Custom_Dynamic_provider = DynamicProvider(
provider_name="Custom_Dynamic_provider",
elements=["A", "B", "C", "D"],
)
fake = Faker()
# 然后将新的Provider添加到 faker 实例中
fake.add_provider(Custom_Dynamic_provider)
# 使用:
fake.Custom_Dynamic_provider()
# 'D'
-
3.2 Localization:
Faker支持多种语言环境,可以通过locale参数传递相应的语言代码来生成符合特定文化背景的假数据。如果没有找到本地化providers,工厂将回退到默认的LCID字符串,即美国英语的en_US。
可以查阅Faker
的官方文档,了解更多支持的语言环境。
from faker import Faker
# 生成多个中文名字
fake = Faker('zh_CN')
for _ in range(3):
print(fake.name())
# 输出:李莉
# 盛利
# 李芳
从v3.0.0版本开始faker.Faker也支持多种语言环境。
from faker import Faker
# 多种语言混合数据
fake = Faker(['zh_CN', 'en_US', 'ja_JP'])
for _ in range(10):
print(fake.name())
# 输出:井上 里佳
# Gregory Vasquez
# 梁瑞
# ......
-
3.3 自定义 Lorem Provider:
如果不想使用默认的lorem ipsum文本,可以提供自己的单词集合。
from faker import Faker
fake = Faker()
my_word_list = [
'danish','cheesecake','sugar',
'Lollipop','wafer','Gummies',
'sesame','Jelly','beans',
'pie','bar','Ice','oat' ]
fake.sentence()
# 输出:'Expedita at beatae voluptatibus nulla omnis.'
fake.sentence(ext_word_list=my_word_list)
# 输出:'Sugar Jelly sugar oat oat bar wafer.'
-
3.4 唯一值:
通过使用生成器上的.unique属性,可以保证为这个特定实例生成的任何值都是唯一的。
from faker import Faker
fake = Faker('zh_CN')
names = [fake.unique.name() for i in range(5)]
names
# 输出:['张琴', '马宇', '郭桂荣', '舒娜', '余亮']
3.5 设置随机种子:
Faker生成器还提供了一个seed()方法,该方法为共享随机数生成器设置种子。在调用相同方法且Faker版本相同时,种子会产生相同的结果。
但是,需要注意的是意,由于Faker会不断更新数据集,因此不能保证不同版本的结果一致。
fake = Faker()
Faker.seed(123)
fake = Faker('zh_CN')
print(fake.name())
# 输出:刘桂荣
每个生成器也可以通过使用seed_instance()方法切换到使用自己的random.Random实例,与共享实例分开,其行为方式相同。例如:
from faker import Faker
fake = Faker('zh_CN')
fake.seed_instance(123)
print(fake.name())
# 输出:刘桂荣
-
3.6 Optimizations:
Faker构造函数有一个名为use_weighting的性能参数。它指定是否尝试使值的频率与现实世界的频率相匹配(例如,英文名字Gary的频率会比Lorimer高得多)。如果use_weighting为False,那么所有项目都有相等的被选中的机会,选择过程会更快。默认值为True。
更多内容可以参考官方文档:
https://faker.readthedocs.io/en/master/


本篇文章来源于微信公众号: 码农设计师