Python Faker 快速生成模拟数据

Python Faker


伪装者.jpg

[TOC]

在软件需求、开发、测试过程中经常需要使用一些测试数据,针对这种情况,开发者一般要么使用已有的系统数据,要么需要手动制造一些数据。然而手动制造数据需要花费大量精力和工作量,Python Faker 能够协助你完成这方面的工作。

1.什么是 Faker

Faker 是一个 Python 包,也是一个开源的 GITHUB 项目,主要用来创建伪数据。使用 Faker 包,无需再手动生成或者手写随机数来生成数据,只需要调用 Faker 提供的方法,即可完成数据的生成。

Github项目地址

2.安装 Faker

  • 方法一:使用 Python 包管理工具 pip 进行安装
pip install faker

推荐采用方法一。

3.Faker 的使用

Faker 的使用较简单,基本就是引包——初始化——调用方法。

3.1 基础使用步骤

步骤1:在 Python 模块中引用 Faker 包;

步骤2:初始化 Faker。

from faker import Faker

# 省略的代码……

f=Faker(locale='zh_CN')
  • 初始化参数localelocale 参数是对于将要生成数据的文化属性的一个选项,默认为 en_US ,只有使用了相关文化,才能生成相对应的随机信息(比如:名字,地址,邮编,城市,省份等)

3.2 可选择的文化信息(按字母顺序排序)

Faker 支持 39 个国家和地区的语言与文化。

  • 'ar_EG' - Arabic (Egypt) / 埃及(阿拉伯语)
  • 'ar_PS' - Arabic (Palestine) / 巴勒斯坦(阿拉伯语)
  • 'ar_SA' - Arabic (Saudi Arabia) / 沙特阿拉伯(阿拉伯语)
  • 'bg_BG' - Bulgarian / 保加利亚(保加利亚语)
  • 'cs_CZ' - Czech / 捷克(捷克语)
  • 'de_DE' - German / 德国(德语)
  • 'dk_DK' - Danish / 丹麦(丹麦语)
  • 'el_GR' - Greek / 希腊(希腊语)
  • 'en_AU' - English (Australia) / 澳大利亚(英语)
  • 'en_CA' - English (Canada) / 加拿大(英语)
  • 'en_GB' - English (Great Britain) / 英国(英语)
  • 'en_US' - English (United States) / 美国(英语)
  • 'es_ES' - Spanish (Spain) / 西班牙(西语)
  • 'es_MX' - Spanish (Mexico) / 墨西哥(西语)
  • 'et_EE' - Estonian / 爱沙尼亚(爱沙尼亚语)
  • 'fa_IR' - Persian (Iran) / 伊朗(波斯语)
  • 'fi_FI' - Finnish / 芬兰(芬兰语)
  • 'fr_FR' - French / 法国(法语)
  • 'hi_IN' - Hindi / 印地语
  • 'hr_HR' - Croatian / 克罗地亚(克罗地亚语)
  • 'hu_HU' - Hungarian / 匈牙利(匈牙利语)
  • 'it_IT' - Italian / 意大利(意大利语)
  • 'ja_JP' - Japanese / 日本(日语)
  • 'ko_KR' - Korean / 韩国(韩语)
  • 'lt_LT' - Lithuanian / 立陶宛(立陶宛语)
  • 'lv_LV' - Latvian / 拉脱维亚(拉脱维亚语)
  • 'ne_NP' - Nepali / 尼泊尔(尼泊尔语)
  • 'nl_NL' - Dutch (Netherlands) / 荷兰(荷兰语)
  • 'no_NO' - Norwegian / 挪威(挪威语)
  • 'pl_PL' - Polish / 波兰(波兰语)
  • 'pt_BR' - Portuguese (Brazil) / 巴西(葡萄牙语)
  • 'pt_PT' - Portuguese (Portugal) / 葡萄牙(葡萄牙语)
  • 'ru_RU' - Russian / 俄罗斯(俄语)
  • 'sl_SI' - Slovene / 斯洛文尼亚(斯洛文尼亚语)
  • 'sv_SE' - Swedish / 瑞典(瑞典语)
  • 'tr_TR' - Turkish / 土尔其(土尔其语)
  • 'uk_UA' - Ukrainian / 乌克兰(乌克兰语)
  • 'zh_CN' - Chinese (China) / 汉语(中华人民共和国)
  • 'zh_TW' - Chinese (Taiwan) / 汉语(中华人民共和国台湾地区)

然后即可使用系统提供的方法:

一段简单的测试代码

# 代码片段 01
from faker import Faker
f=Faker(locale='zh_CN')
f.name()  #生成姓名
f.address() #生成地址

4.常用方法一览

Faker 提供的方法众多,这里进行了初步整理,分为 12 大类。

4.01 行政区划与地理

  • country_code():国家编码
  • currency_code():货币编码
  • country():国家
  • province():省份
  • district():区
  • city_suffix():市,县
  • postcode():邮编
  • street_address():街道地址
  • street_name():街道名
  • street_suffix():街、路
  • geo_coordinate():地理坐标
  • latitude():地理坐标(纬度)
  • longitude():地理坐标(经度)

4.02 随机数

  • numerify():三位随机数字
  • random_digit():0~9随机数
  • random_digit_not_null():1~9的随机数
  • random_element():随机字母
  • random_int():随机数字,默认0~9999,可以通过设置min,max来设置
  • random_letter():随机字母
  • random_number():随机数字,参数digits设置生成的数字位数
  • lexify():替换所有问号(“?”)带有随机字母的事件。

4.03 颜色

  • color_name():随机颜色名
  • hex_color():随机HEX颜色
  • rgb_color():随机RGB颜色
  • safe_color_name():随机安全色名
  • safe_hex_color():随机安全HEX颜色

4.04 组织

  • bs():随机公司服务名
  • company():随机公司名(长)
  • company_prefix():随机公司名(短)
  • company_suffix():公司性质

4.05 日期时间

  • am_pm():AM/PM
  • century():随机世纪
  • date():随机日期
  • date_between():随机生成指定范围内日期,参数:start_date,end_date取值:具体日期或者today,-30d,-30y类似
  • date_between_dates():随机生成指定范围内日期,用法同上
  • date_object():随机生产从1970-01-01到指定日期的随机日期。
  • date_this_month():
  • date_this_year():
  • date_time():随机生成指定时间(1970年01月01日至今)
  • 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():随机年份

4.06 文件类

  • file_extension():随机文件扩展名
  • file_name():随机文件名(包含扩展名,不包含路径)
  • file_path():随机文件路径(包含文件名,扩展名)
  • mime_type():随机 MIME 类型
  • ascii_company_email():随机 ASCII 公司邮箱名
  • ascii_email():随机 ASCII 邮箱
  • ascii_free_email():
  • ascii_safe_email():
  • company_email():随机企业邮箱地址

4.07 信息与网络类

  • domain_name():生成域名
  • domain_word():域词(即,不包含后缀)
  • f.image_url():随机URL地址
  • ipv4():随机IP4地址
  • ipv6():随机IP6地址
  • mac_address():随机MAC地址
  • tld():网址域名后缀(.com,.net.cn,等等,不包括.)
  • uri():随机URI地址
  • email():
  • free_email():
  • free_email_domain():
  • f.safe_email():安全邮箱
  • uri_extension():网址文件后缀
  • uri_page():网址文件(不包含后缀)
  • uri_path():网址文件路径(不包含文件名)
  • url():随机URL地址
  • user_name():随机用户名
  • isbn10():随机ISBN(10位)
  • isbn13():随机ISBN(13位)
  • job():随机职位

4.08 文本类

  • paragraph():随机生成一个段落
  • paragraphs():随机生成多个段落,通过参数nb来控制段落数,返回数组
  • sentence():随机生成一句话
  • sentences():随机生成多句话,与段落类似
  • text():随机生成一篇文章(不要幻想着人工智能了,至今没完全看懂一句话是什么意思)
  • word():随机生成词语
  • words():随机生成多个词语,用法与段落,句子,类似

4.09 编码

  • binary():随机生成二进制编码
  • language_code():随机生成两位语言编码
  • boolean():True/False
  • locale():随机生成语言/国际 信息
  • md5():随机生成MD5
  • password():随机生成密码,可选参数:length:密码长度;special_chars:是否能使用特殊字符;digits:是否包含数字;upper_case:是否包含大写字母;lower_case:是否包含小写字母
  • sha1():随机SHA1
  • sha256():随机SHA256
  • uuid4():随机UUID
  • null_boolean():NULL/True/False

4.10人物类

  • first_name():随机生成西方人名( first name )
  • first_name_female():女性名
  • first_name_male():男性名
  • first_romanized_name():罗马名
  • last_name():随机生成西方人姓( last name )
  • last_name_female():女姓
  • last_name_male():男姓
  • last_romanized_name():
  • name():随机生成全名
  • name_female():男性全名
  • name_male():女性全名
  • romanized_name():罗马名
  • msisdn():移动台国际用户识别码,即移动用户的ISDN号码
  • phone_number():随机生成手机号
  • phonenumber_prefix():随机生成手机号段
  • profile():随机生成档案信息
  • simple_profile():随机生成简单档案信息
  • ssn():生成身份证号
  • credit_card_expire():随机信用卡到期日
  • credit_card_full():生成完整信用卡信息
  • credit_card_number():信用卡号
  • credit_card_provider():信用卡类型
  • credit_card_security_code():信用卡安全码

4.11 指定类型数据

  • pybool():随机生成布尔值
  • pydecimal():
  • pydict():随机生成字典
  • pyfloat():left_digits=5 #生成的整数位数,
    right_digits=2 #生成的小数位数,
    positive=True #是否只有正数
  • pyint():随机生成整数
  • pyiterable()
  • pylist()
  • pyset()
  • pystr()
  • pystruct()
  • pytuple()

4.12 Web 与浏览器类

  • 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信息

5.使用中与文化相关的注意事项

不同的文化类,方法是有区别的。

比如,在中文(zh_CN)中的方法,district()#获取区 province()#获取省的方法,在有些包里是没有的,这需要根据所使用文化类的国家特制来。

使用日文包没有province方法
比如,中国的一级行政单位,是省,直辖市,自治区;而日本的一级行政单位,是都、道、府、县。所以,日文包(ja_JP)中,就没有相应的province(),district(),取而代之的是prefecture(),town();在美国,一级行政单位是州,所以,在美国英语包(en_US)中,取而代之的是state();

总之,在使用不同Fake类之前,最好对所生成文化的国家信息做初步的了解,建议先浏览其对应的类文件的成员。

6.简单示例

# coding=utf-8
# 代码片段 02
# 代码位置:views.py
"""
版权信息 (CopyRight)      : All Right Reserved, Design & Develop By Halcyony 辉云科技
项目名称 (Project Name)   : Hobbit04_dev
文件标题 (Title)          : Testing staff / 自动添加模拟员工信息
文件描述 (Description)    : 
最后修改时间          @作者(Author)       @版本(Version)       @说明 (Description)
---------------     -------------       ---------------     -------------------
2020-03-30 15:27    Steven Nominz       1.0                 创建文档
"""
import datetime

from django.http import HttpResponse

from faker import Faker

from org.models.m_staff import Staffs

f = Faker(locale='zh_CN')


def faker_check_m_staff(request):
    """
    向员工表(org_staff)中自动添加模拟数据
    每次添加 10 名员工
    2020-03-30 16:00 测试成功
    访问的 url :http://127.0.0.1:8000/api/v1/org/c_staff/
    :param request:
    :return:
    """
    result = 0
    times = 10
    for i in range(times):
        ssn = f.ssn()
        if (int(ssn[16]) % 2) == 0:
            gender = "女"
            name = f.name_female()
        else:
            gender = "男"
            name = f.name_male()
        birthday_str = ssn[6:10] + '-' + ssn[10:12] + '-' + ssn[12:14]
        birthday = datetime.datetime.strptime(birthday_str, '%Y-%m-%d').date()
        p = Staffs(staff_name=name,
                   staff_gender=gender,
                   staff_birthday=birthday,
                   staff_ssn=ssn,
                   # call=f.phone_number(),
                   # profile=f.profile()
                   )
        p.save()
        result += i
    return HttpResponse('成功添加%s 等 %s 名模拟员工信息。' % (name, times))
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容