python+faker生成以假乱真的数据

用faker来生成各种各样的伪数据。

1. 背景

软件测试中,除了测试用例之外,构造各种测试数据也测试人员需要花费时间去处理的。如果能够快速的造出比较真实、贴切业务实际、且数量可观的测试数据,在一定程度上是可以加快测试人员的工作效率的。faker这个库,便很好的解决了这个问题。

2.安装使用

2.1 安装

1
pip install faker

2.2 基本用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
from faker import Faker

# 初始化,指定地区,默认是美国
fake = Faker(locale='zh_CN')

# 可选择的文化信息
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    匈牙利语 - 匈牙利

hy_AM - Armenian 亚美尼亚语 - 亚美尼亚

it_IT - Italian       意大利语 -  意大利

ja_JP - Japanese    日语 - 日本

ko_KR - Korean    朝鲜语 - 韩国

ka_GE - Georgian (Georgia)  格鲁吉亚语 - 格鲁吉亚

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)  (繁体中文)

2.3 人物相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
fake.name()                  # 姓名
# '王凯'

fake.last_name() # 姓
# '宋'

fake.address() # 地址
# 河北省辛集县合川张街p座 489476

fake.job() # 职位
# '法务助理'

fake.ssn() # 身份证
# '410622198603154708'

2.4 电话相关

1
2
3
4
5
6
7
8
9
fake.msisdn()                # 完整手机号码(加了国家和国内区号)
# '9067936325890'

fake.phone_number() # 手机号
# '18520149907'

fake.phonenumber_prefix() # 区号
# 145

2.5 档案相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
fake.profile(fields=None, sex=None)        # 档案(完整)
# { 'address': '河南省昆明市清河哈尔滨路H座 496152',
# 'birthdate': datetime.date(2014, 11, 20),
# 'blood_group': 'AB+',
# 'company': '易动力信息有限公司',
# 'current_location': (Decimal('77.504143'), Decimal('-167.365806')),
# 'job': '培训策划',
# 'mail': 'liangyang@yahoo.com',
# 'name': '杨磊',
# 'residence': '澳门特别行政区台北县西夏兴城街L座 803680',
# 'sex': 'F',
# 'ssn': '140722200004166520',
# 'username': 'lei65',
# 'website': [ 'http://www.29.cn/',
# 'http://www.lei.cn/',
# 'http://lishao.net/',
# 'https://www.feng.net/']}

fake.simple_profile(sex=None) # 档案(简单)
# { 'address': '广西壮族自治区南宁市花溪孙街c座 653694',
# 'birthdate': datetime.date(1993, 12, 16),
# 'mail': 'haomin@yahoo.com',
# 'name': '任秀英',
# 'sex': 'F',
# 'username': 'iding'}

2.6 地理信息类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
fake.address()            # 地址
# '香港特别行政区大冶县上街钟街k座 664713'

fake.building_number() # 楼名
# 'v座'

fake.city() # 完整城市名
# '长春县'

fake.city_name() # 城市名字(不带市县)
# '梧州'

fake.city_suffix() # 城市后缀名
# '市'

fake.country() # 国家名称
# '厄立特里亚'

fake.country_code(representation="alpha-2")
# 'BZ' # 国家编号

fake.district() # 地区
# '沙湾'

fake.postcode() # 邮编
# '332991'

fake.province() # 省
# '河北省'

fake.street_address() # 街道地址
# '武汉街D座'

fake.street_name() # 街道名称
# '广州路'

fake.street_suffix() # 街道后缀名
# '路'

2.7 公司相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
fake.bs()                 # 商业用词
# 'synthesize strategic vortals'

fake.catch_phrase() # 妙句(口号)
# 'Robust even-keeled service-desk'

fake.company() # 公司名称
# '富罳科技有限公司'

fake.company_prefix() # 公司名称前缀
# '商软冠联'

fake.company_suffix() # 公司名称后缀
# '网络有限公司'

2.8 时间相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
fake.am_pm()        # AM或PM
# 'PM'

fake.century() # 世纪
# 'XII'

fake.date(pattern="%Y-%m-%d", end_datetime=None) # 日期字符串(可设置格式和最大日期)
# '1998-05-13'

fake.date_between(start_date="-30y", end_date="today") # 日期(可设置限定范围)
# datetime.date(2014, 8, 17)

fake.date_between_dates(date_start=None, date_end=None) # 同上
# datetime.date(2019, 10, 14)

fake.date_object(end_datetime=None) # 日期(可设置最大日期)
# datetime.date(1981, 12, 20)

fake.date_of_birth(tzinfo=None, minimum_age=0, maximum_age=115) # 出生日期
# datetime.date(1931, 12, 8)

fake.date_this_century(before_today=True, after_today=False) # 本世纪日期
# datetime.date(2003, 5, 4)

fake.date_this_decade(before_today=True, after_today=False) # 本年代中的日期
# datetime.date(2014, 1, 29)

fake.date_this_month(before_today=True, after_today=False) # 本月中的日期
# datetime.date(2019, 10, 10)

fake.date_this_year(before_today=True, after_today=False) # 本年中的日期
# datetime.date(2019, 3, 6)

fake.date_time(tzinfo=None, end_datetime=None) # 日期和时间
# datetime.datetime(1990, 8, 11, 22, 25)

fake.date_time_ad(tzinfo=None, end_datetime=None, start_datetime=None) # 日期和时间(从001年1月1日到现在)
# datetime.datetime(244, 12, 17, 9, 59, 56)

fake.date_time_between(start_date="-30y", end_date="now", tzinfo=None) # 日期时间(可设置限定范围)
# datetime.datetime(1995, 4, 19, 17, 23, 51)

fake.date_time_between_dates(datetime_start=None, datetime_end=None, tzinfo=None) # 同上
# datetime.datetime(2019, 10, 14, 14, 15, 36)

fake.date_time_this_century(before_now=True, after_now=False, tzinfo=None) # 本世纪中的日期和时间
# datetime.datetime(2009, 8, 26, 18, 27, 9)

fake.date_time_this_decade(before_now=True, after_now=False, tzinfo=None) # 本年代中的日期和时间
# datetime.datetime(2019, 2, 24, 22, 18, 44)

fake.date_time_this_month(before_now=True, after_now=False, tzinfo=None) # 本月中的日期和时间
# datetime.datetime(2019, 10, 3, 9, 20, 44)

fake.date_time_this_year(before_now=True, after_now=False, tzinfo=None) # 本年中的日期和时间
# datetime.datetime(2019, 2, 10, 7, 3, 18)

fake.day_of_month() # 几号
# '23'

fake.day_of_week() # 星期几
# 'Tuesday'

fake.future_date(end_date="+30d", tzinfo=None) # 未来日期
# datetime.date(2019, 10, 28)

fake.future_datetime(end_date="+30d", tzinfo=None) # 未来日期和时间
# datetime.datetime(2019, 10, 28, 21, 4, 35)

fake.iso8601(tzinfo=None, end_datetime=None) # iso8601格式日期和时间
# '1995-04-10T00:45:01'

fake.month() # 第几月
# '07'

fake.month_name() # 月份名称
# 'December'

fake.past_date(start_date="-30d", tzinfo=None) # 过去日期
# datetime.date(2019, 10, 3)

fake.past_datetime(start_date="-30d", tzinfo=None) # 过去日期和时间
# datetime.datetime(2019, 9, 30, 20, 25, 43)

fake.time(pattern="%H:%M:%S", end_datetime=None) # 时间(可设置格式和最大日期时间)
# '14:26:44'

fake.time_delta(end_datetime=None) # 时间间隔
# datetime.timedelta(0)

fake.time_object(end_datetime=None) # 时间(可设置最大日期时间)
# datetime.time(4, 41, 39)

fake.time_series(start_date="-30d", end_date="now", precision=None, distrib=None, tzinfo=None)
# <generator object Provider.time_series at 0x7fadf51e0930>

fake.timezone() # 时区
# 'Asia/Baku'

fake.unix_time(end_datetime=None, start_datetime=None) # UNIX时间戳
# 393980728

fake.year() # 某年
# '2016'

2.9 文件相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
fake.file_extension(category=None)                # 文件扩展名
# 'avi'

fake.file_name(category=None, extension=None) # 文件名
# '专业.pptx'

fake.file_path(depth=1, category=None, extension=None) # 文件路径
# '/的话/以上.ods'

fake.mime_type(category=None) # MIME类型
# 'application/xop+xml'

fake.unix_device(prefix=None) # UNIX设备
# '/dev/xvdq'

fake.unix_partition(prefix=None) # UNIX分区
# '/dev/xvdc6'

2.10 坐标相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
fake.coordinate(center=None, radius=0.001)        # 坐标
# Decimal('147.543284')

fake.latitude() # 纬度
# Decimal('66.519139')

fake.latlng() # 经纬度
# (Decimal('55.3370965'), Decimal('-15.427896'))

fake.local_latlng(country_code="US", coords_only=False) # 返回某个国家某地的经纬度
# ('25.67927', '-80.31727', 'Kendall', 'US', 'America/New_York')

fake.location_on_land(coords_only=False) # 返回地球上某个位置的经纬度
# ('42.50729', '1.53414', 'les Escaldes', 'AD', 'Europe/Andorra')

fake.longitude() # 经度
# Decimal('70.815233')

2.11 网络相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
fake.ascii_company_email(*args, **kwargs)        # 企业邮箱(ascii编码)
# 'qiuyan@xiulan.cn'

fake.ascii_email(*args, **kwargs) # 企业邮箱+免费邮箱(ascii编码)
# 'lei59@78.net'

fake.ascii_free_email(*args, **kwargs) # 免费邮箱(ascii编码)
# 'pcheng@gmail.com'

fake.ascii_safe_email(*args, **kwargs) # 安全邮箱(ascii编码)
# 'fangyan@example.org'

fake.company_email(*args, **kwargs) # 企业邮箱
# 'scao@pingjing.net'

fake.domain_name(levels=1) # 域名
# 'dy.cn'

fake.domain_word(*args, **kwargs) # 二级域名
# 'gangxiuying'

fake.email(*args, **kwargs) # 企业邮箱+免费邮箱
# 'na13@ding.cn'

fake.free_email(*args, **kwargs) # 免费邮箱
# 'fang48@hotmail.com'

fake.free_email_domain(*args, **kwargs) # 免费邮箱域名
# 'yahoo.com'

fake.hostname(*args, **kwargs) # 主机名
# 'lt-70.53.cn'

fake.image_url(width=None, height=None) # 图片URL
# 'https://placekitten.com/752/243'

fake.ipv4(network=False, address_class=None, private=None) # ipv4
# '160.152.149.78'

fake.ipv4_network_class() # ipv4网络等级
# 'b'

fake.ipv4_private(network=False, address_class=None) # 私有ipv4
# '10.99.124.57'

fake.ipv4_public(network=False, address_class=None) # 公共ipv4
# '169.120.29.235'

fake.ipv6(network=False) # ipv6
# 'f392:573f:d60f:9aed:2a4c:36d7:fe5b:7034'

fake.mac_address() # MAC地址
# '62:67:79:8c:c2:40'

fake.safe_email(*args, **kwargs) # 安全邮箱
# 'jing58@example.org'

fake.slug(*args, **kwargs) # URL中的slug
# ''

fake.tld() # 顶级域名
# 'cn'

fake.uri() # URI
# 'http://yi.com/list/main/explore/register.php'

fake.uri_extension() # URI扩展
# '.php'

fake.uri_page() # URI页
# 'terms'

fake.uri_path(deep=None) # URI路径
# 'blog/tags/blog'

fake.url(schemes=None) # URL
# 'http://liutao.cn/'

fake.user_name(*args, **kwargs) # 用户名
# 'xiulan80'

2.12 信用卡相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
fake.cryptocurrency()           # 加密货币代码+名称
# ('TRX', 'TRON')

fake.cryptocurrency_code() # 加密货币代码
# 'MZC'

fake.cryptocurrency_name() # 加密货币名称
# 'Ripple'

fake.currency() # 货币代码+名称
# ('GNF', 'Guinean franc')

fake.currency_code() # 货币代码
# 'SOS'

fake.currency_name() # 货币名称
# 'Lebanese pound'

2.13 颜色相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
fake.color_name()        # 颜色名称
# 'Orange'

fake.hex_color() # 颜色十六进制值
# '#a5cb7c'

fake.rgb_color() # 颜色RGB值
# '15,245,42'

fake.rgb_css_color() # CSS颜色值
# 'rgb(15,70,13)'

fake.safe_color_name() # 安全色
# 'aqua'

fake.safe_hex_color() # 安全色十六进制值
# '#881100'

2.14浏览器信息类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
fake.mac_platform_token()
# 'Macintosh; Intel Mac OS X 10_12_1'

fake.firefox()
# ('Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_9_4; rv:1.9.4.20) '
# 'Gecko/2012-05-03 04:16:34 Firefox/3.6.10')

fake.windows_platform_token()
# 'Windows 95'

fake.safari()
# ('Mozilla/5.0 (iPod; U; CPU iPhone OS 3_1 like Mac OS X; sat-IN) '
# 'AppleWebKit/533.2.4 (KHTML, like Gecko) Version/3.0.5 Mobile/8B113 '
# 'Safari/6533.2.4')

fake.chrome(version_from=13, version_to=63, build_from=800, build_to=899)
# ('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/5331 (KHTML, like Gecko) '
# 'Chrome/52.0.838.0 Safari/5331')

fake.opera()
# 'Opera/8.83.(X11; Linux i686; ce-RU) Presto/2.9.169 Version/10.00'

fake.mac_processor()
# 'Intel'

fake.user_agent()
# ('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_9 rv:3.0; pa-IN) '
# 'AppleWebKit/532.47.6 (KHTML, like Gecko) Version/4.0.1 Safari/532.47.6')

fake.linux_platform_token()
# 'X11; Linux x86_64'

fake.linux_processor()
# 'i686'

fake.internet_explorer()
# 'Mozilla/5.0 (compatible; MSIE 5.0; Windows NT 5.01; Trident/3.1)'

2.15文本相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
fake.paragraph(nb_sentences=3, variable_nb_sentences=True, ext_word_list=None)    # 单个段落
# '最新事情生产.方面解决名称责任而且.类型其实内容发生电脑.音乐具有今年是一.'

fake.paragraphs(nb=3, ext_word_list=None) # 多个段落
# ['使用评论管理.没有广告工作评论是否.', '帖子而且专业.这些比较完全发现准备设计工具.', '完成详细发生空间汽车.新闻电影您的游戏这种操作网站知道.']

fake.sentence(nb_words=6, variable_nb_words=True, ext_word_list=None) # 单个句子
# '直接这样点击单位对于时候.'

fake.sentences(nb=3, ext_word_list=None) # 多个句子
# ['电话国际项目管理.', '软件之后提高一样次数电影规定.', '东西会员发展什么不断经济.']

fake.text(max_nb_chars=200, ext_word_list=None) # 单个文本
# ('资源信息得到因此开发资源资料.\n'
# '国家这样等级需要用户如此.电话非常一切游戏所以学校类型.不要正在如果来源认为投资在线.\n'
# '这些更新密码其中起来实现有些.以上事情重要通过.\n'
# '但是就是介绍最大深圳简介设计.历史这种可以出现中心社区.\n'
# '政府当然包括简介全国内容生活.有些地址以上.回复这些来自搜索现在不断经营不断.\n'
# '操作为什孩子报告东西拥有如此.相关特别业务日本这种.合作问题准备比较谢谢.')

fake.texts(nb_texts=3, max_nb_chars=200, ext_word_list=None) # 多个文本
# [ '地址控制无法正在必须中心积分一些.支持制作安全.\n'
# '比较最新最大她的功能能够是一.主题选择当前显示.\n'
# '的话社会现在地区阅读继续所有.美国数据正在深圳不能.\n'
# '能够查看其中生活商品.谢谢认为之后以及以下之后这里.\n'
# '活动支持人民这么今年.要求包括生活运行技术社会.\n'
# '当前更多游戏.下载一点开发论坛法律为了美国.\n'
# '如何更新个人谢谢作为还有论坛.销售销售法律学生这么责任一些.',
# '日本最大方法活动主题到了结果.教育还有孩子觉得简介出现国际.东西国家图片威望品牌.\n'
# '那些会员现在准备可能.威望部分文件主题东西业务一切之间.所以必须当前方法.\n'
# '等级大小重要可能下载孩子.来源感觉业务文件以后深圳学校.网络什么新闻都是安全.\n'
# '资料重要成功谢谢时候音乐安全相关.电脑系列日期.工具使用搜索来源首页.\n'
# '直接企业影响大小什么.相关品牌选择她的规定来源推荐.',
# '中文文化数据内容系统.他们这些之间深圳.\n'
# '联系城市出现部分都是政府生活.社会同时人民市场现在决定需要.其他政府简介深圳教育加入对于.\n'
# '运行是一语言安全通过大小学生.商品然后信息由于虽然.\n'
# '因为关于选择希望行业具有深圳.出现价格那么下载提高知道人员.设备直接显示事情帖子正在两个关于.\n'
# '系列公司大家.论坛所以完全文章标准.活动中国工具电脑.\n'
# '主题作者不能.进行国家系统地区增加.经验质量价格我的.']

fake.word(ext_word_list=None) # 单个词语
# '新闻'

fake.words(nb=3, ext_word_list=None, unique=False) # 多个词语
# ['选择', '历史', '规定']

2.16用户代理相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
fake.android_platform_token()        # 安卓
# 'Android 5.0.1'

fake.chrome(version_from=13, version_to=63, build_from=800, build_to=899) # Chrome
# ('Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_10_9) AppleWebKit/534.0 (KHTML, '
# 'like Gecko) Chrome/62.0.826.0 Safari/534.0')

fake.firefox() # FireFox
# ('Mozilla/5.0 (Windows NT 5.1; cs-CZ; rv:1.9.0.20) Gecko/2010-12-02 06:14:30 '
# 'Firefox/3.6.5')

fake.internet_explorer() # Ie
# 'Mozilla/5.0 (compatible; MSIE 7.0; Windows 95; Trident/3.0)'

fake.ios_platform_token() # ios
# 'iPhone; CPU iPhone OS 5_1_1 like Mac OS X'

fake.linux_platform_token() # Linux
# 'X11; Linux i686'

fake.linux_processor() # Linux处理器
# 'x86_64'

fake.mac_platform_token() # Mac
# 'Macintosh; U; PPC Mac OS X 10_11_2'

fake.mac_processor() # Mac处理器
# 'Intel'

fake.opera() # Opera
# 'Opera/8.32.(Windows 98; Win 9x 4.90; mr-IN) Presto/2.9.188 Version/10.00'

fake.safari() # Safari
# ('Mozilla/5.0 (Windows; U; Windows NT 6.0) AppleWebKit/533.43.6 (KHTML, like '
# 'Gecko) Version/4.0.5 Safari/533.43.6')

fake.user_agent() # 随机用户代理
# 'Mozilla/5.0 (compatible; MSIE 9.0; Windows 95; Trident/3.0)'

fake.windows_platform_token() # Windows
# 'Windows NT 6.2'

3. 脚本示例

faker_demo.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#encoding=utf-8
import csv
from faker import Faker

"""
生成尽可能真实的假数据

使用方法:
1.安装依赖包
pip install faker
2.执行脚本
python faker_demo.py
3.当前目录,查看生成的数据
"""

#保存为csv文件
def save_data_csv(file_name):
#获取数据
datas = faker_data()
#保存
with open(file_name,'w+',encoding='utf-8',newline='') as file_csv:
writer = csv.writer(file_csv, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL)
writer.writerows(datas)

#生成数据
def faker_data():
#指定数据的国家地区
f = Faker('zh-CN')
#定义一个列表,用来存放所有数据
datas = []
#标题
title = ["唯一标识","编号","姓名","手机号","身份证号","性别","邮箱","职业","家庭地址","获取时间"]
#添加标题到列表中
datas.append(title)
#开始按照标题的顺序,生成200条数据
for i in range(0,200):
#定义一个列表,用来存一行数据
data = []
#uuid
data.append(f.uuid4())
#编号,001,不足3位的左边用0来补齐
data.append(str(i+1).rjust(3,'0'))
#姓名
data.append(f.name())
#手机号
data.append(f.phone_number())
#身份证
ssn = f.ssn()
data.append(ssn)
#性别,根据身份证的第17位来判断
ssn_sex = int(ssn[16:17])
#01:男,02:女
if ssn_sex % 2:
sex = "01"
else:
sex = "02"
data.append(sex)
#邮箱
data.append(f.email())
#职业
data.append(f.job())
#地址,让其更加复合中国的地址
address = f.address()[:-9] + str(f.pyint(min_value=0, max_value=999))+ "号"
data.append(address)
#获取时间,近3年的
actime_time = f.date_time_between(start_date="-3y", end_date="now")
data.append(actime_time)
#将这一行数据添加到datas中
datas.append(data)
#返回所有的数据
return datas


if __name__ == '__main__':
#文件名
file_name = 'test.csv'
save_data_csv(file_name)