{% raw %}

Python Faker 教程

原文: http://zetcode.com/python/faker/

Python Faker 教程展示了如何使用 Faker 包在 Python 中生成伪数据。 我们使用joke2k/faker库。

Faker

Faker 是一个生成伪造数据的 Python 库。 Faka 数据通常用于测试或用一些伪数据填充数据库。 Faker 受 PHP 的 Faker,Perl 的Data::Faker和 Ruby 的 Faker 的启发。

设置 Faker

该包随 composer 一起安装。

  1. $ pip install Faker

我们安装了 Faker 模块。

  1. $ pip install Dumper

另外,我们安装了 Dumper,它在转储变量时提供更好的控制台输出。

Faker 生成器

faker.Faker()创建并初始化一个伪造的生成器,该伪造器可以通过访问以数据类型命名的属性来生成数据。

Faker 将数据生成委托给提供者。 默认供应器使用英语语言环境。 Faker 支持其他语言环境; 他们的完成水平不同。

简单的 Faker

以下示例是 Faker 的简单演示。

simple.py

  1. #!/usr/bin/env python
  2. from faker import Faker
  3. faker = Faker()
  4. print(f'name: {faker.name()}')
  5. print(f'address: {faker.address()}')
  6. print(f'text: {faker.text()}')

该示例输出假名称,地址和文本。

  1. $ ./simple.py
  2. name: Arthur Patton
  3. address: 0638 Larsen Way
  4. Tylermouth, CA 48344
  5. text: Save general start bar. Become class both bank Mrs so myself.
  6. Each difficult performance even. Total anyone develop her raise research both.
  7. Laugh sport necessary tree. As during day up fall.

这是一个示例输出。

Faker 名称

在第二个示例中,我们伪造与用户名有关的数据。

names.py

  1. #!/usr/bin/env python
  2. from faker import Faker
  3. faker = Faker()
  4. print(f'Name: {faker.name()}')
  5. print(f'First name: {faker.first_name()}')
  6. print(f'Last name: {faker.last_name()}')
  7. print('--------------------------')
  8. print(f'Male name: {faker.name_male()}')
  9. print(f'Female name: {faker.name_female()}')

该示例创建假的全名,男性的姓氏和姓氏。

  1. $ ./names.py
  2. Name: Tara Brown
  3. First name: Stephanie
  4. Last name: Martin
  5. --------------------------
  6. Male name: John Banks
  7. Female name: Lacey Roberts

这是一个示例输出。

Faker 工作

作业由job()生成。

jobs.py

  1. #!/usr/bin/env python
  2. from faker import Faker
  3. faker = Faker()
  4. for _ in range(6):
  5. print(faker.job())

该示例创建了六个伪造作业。

  1. $ ./jobs.py
  2. Town planner
  3. Paediatric nurse
  4. Geographical information systems officer
  5. Water quality scientist
  6. Engineer, maintenance
  7. Designer, ceramics/pottery

这是一个示例输出。

Faker 语言环境数据

Faker 在某种程度上支持本地化数据。 语言环境被传递给构造方法。 请注意,语言环境已完成各种级别。

localized.py

  1. #!/usr/bin/env python
  2. from faker import Faker
  3. faker = Faker('cz_CZ')
  4. for i in range(3):
  5. name = faker.name()
  6. address = faker.address()
  7. phone = faker.phone_number()
  8. print(f'{name}, {address}, {phone}')

该示例使用捷克语生成伪造数据。

  1. $ ./localized.py
  2. Irena Novotná, Nad Šancemi 725
  3. 055 80 Bojkovice, 606 136 053
  4. Stanislav Svoboda, Březanova 225
  5. 621 17 Bystřice pod Hostýnem, 727 057 251
  6. Klára Moravcová, Neužilova 6/3
  7. 134 97 Česká Kamenice, 606 374 469

这是一个示例输出。 请注意,捷克语具有口音。

Faker 货币

以下示例为货币创建伪造数据。

currencies.py

  1. #!/usr/bin/env python
  2. from faker import Faker
  3. faker = Faker()
  4. print(f'currency: {faker.currency()}')
  5. print(f'currency name: {faker.currency_name()}')
  6. print(f'currency code: {faker.currency_code()}')

该程序生成假货币。

  1. $ ./currencies.py
  2. currency: ('ISK', 'Icelandic króna')
  3. currency name: Israeli new shekel
  4. currency code: DJF

这是一个示例输出。

假话

Faker 允许创建假单词。

words.py

  1. #!/usr/bin/env python
  2. from faker import Faker
  3. faker = Faker()
  4. print(f'a word: {faker.word()}')
  5. print(f'six words: {faker.words(6)}')
  6. words = ['forest', 'blue', 'cloud', 'sky', 'wood', 'falcon']
  7. print(f'customized unique words: {faker.words(3, words, True)}')

该示例创建伪单词。

  1. print(f'a word: {faker.word()}')

该行生成一个伪造的单词。

  1. print(f'six words: {faker.words(6)}')

在这里,我们生成六个伪单词。

  1. words = ['forest', 'blue', 'cloud', 'sky', 'wood', 'falcon']
  2. print(f'customized unique words: {faker.words(3, words, True)}')

我们还可以从预定义的单词列表中创建假单词。

  1. $ words.py
  2. a word: show
  3. six words: ['value', 'its', 'those', 'wish', 'enter', 'hold']
  4. customized unique words: ['forest', 'blue', 'sky']

这是一个示例输出。

Faker 个人数据

Faker 可以使用simple_profile()创建简单的虚拟配置文件,并使用profile()创建扩展的配置文件。

profiles.py

  1. #!/usr/bin/env python
  2. from faker import Faker
  3. import dumper
  4. faker = Faker()
  5. profile1 = faker.simple_profile()
  6. dumper.dump(profile1)
  7. print('--------------------------')
  8. profile2 = faker.simple_profile('M')
  9. dumper.dump(profile2)
  10. print('--------------------------')
  11. profile3 = faker.profile(sex='F')
  12. dumper.dump(profile3)

该示例为男性和女性创建虚拟概要文件。

  1. $ ./profiles.py
  2. <dict at 0x20d590a7678>:
  3. username: 'gmorgan'
  4. name: 'Jessica Clark'
  5. sex: 'F'
  6. address: '694 Joseph Valleys\nJohnfort, ME 81780'
  7. mail: 'bettybuckley@yahoo.com'
  8. birthdate: <str at 0x20d5bcbd7b0>: 'datetime.date(1938, 9, 18)'
  9. --------------------------
  10. <dict at 0x20d5b0065e8>:
  11. username: 'mrios'
  12. name: 'Harold Wagner'
  13. sex: 'M'
  14. address: '26439 Robinson Radial\nWest Meghanmouth, PA 85463'
  15. mail: 'josechoi@gmail.com'
  16. birthdate: <str at 0x20d5bcbd7b0>: 'datetime.date(1986, 8, 18)'
  17. --------------------------
  18. <dict at 0x20d5bd24990>:
  19. job: 'Engineer, communications'
  20. company: 'Jackson-Willis'
  21. ssn: '430-41-6118'
  22. residence: 'USNS Odom\nFPO AP 47095'
  23. current_location: <tuple at 0x20d5bca9a88>
  24. 0: <str at 0x20d5bd248a0>: "Decimal('74.1885785')"
  25. 1: <str at 0x20d5bd248a0>: "Decimal('119.951995')"
  26. blood_group: 'O-'
  27. website: ['http://roberson.com/']
  28. username: 'ygutierrez'
  29. name: 'Lindsay Walker'
  30. sex: 'F'
  31. address: '22968 Beverly Road Suite 918\nTimothyborough, SD 10494'
  32. mail: 'aliciamccall@yahoo.com'
  33. birthdate: <str at 0x20d5bcbd7b0>: 'datetime.date(1979, 1, 4)'

这是一个示例输出。

Faker 号码

Faker 允许生成随机数字和整数。

fake_numbers.py

  1. #!/usr/bin/env python
  2. from faker import Faker
  3. faker = Faker()
  4. print(f'Random int: {faker.random_int()}')
  5. print(f'Random int: {faker.random_int(0, 100)}')
  6. print(f'Random digit: {faker.random_digit()}')

该示例生成随机数字和整数。

  1. print(f'Random int: {faker.random_int(0, 100)}')

我们可以在random_int()方法中指定界限。

  1. $ ./fake_numbers.py
  2. Random int: 5181
  3. Random int: 91
  4. Random digit: 9

这是一个示例输出。

Faker 哈希和 uuid

虚假哈希和 uuid 的 Faker 支持。

hash_uuid.py

  1. #!/usr/bin/env python
  2. from faker import Faker
  3. faker = Faker()
  4. print(f'md5: {faker.md5()}')
  5. print(f'sha1: {faker.sha1()}')
  6. print(f'sha256: {faker.sha256()}')
  7. print(f'uuid4: {faker.uuid4()}')

该示例生成三个假哈希和一个 uuid 值。

  1. $ ./hash_uuid.py
  2. md5: aace57d56794686acec9eb190d401d46
  3. sha1: 9f8f6af3089e7b5ed571591701afcfd9c2bb7a0e
  4. sha256: 8b117b58599809f50735c701f598312b0f64203a8ffacde09af23db69cfd62d5
  5. uuid4: 38092dcd-0e49-4ac0-b39b-7edf6db62290

这是一个示例输出。

Faker 互联网相关数据

Faker 有多个用于伪造与互联网相关的数据的访问器。

internet.py

  1. #!/usr/bin/env python
  2. from faker import Faker
  3. faker = Faker()
  4. print(f'Email: {faker.email()}')
  5. print(f'Safe email: {faker.safe_email()}')
  6. print(f'Free email: {faker.free_email()}')
  7. print(f'Company email: {faker.company_email()}')
  8. print('------------------------------------')
  9. print(f'Host name: {faker.hostname()}')
  10. print(f'Domain name: {faker.domain_name()}')
  11. print(f'Domain word: {faker.domain_word()}')
  12. print(f'TLD: {faker.tld()}')
  13. print('------------------------------------')
  14. print(f'IPv4: {faker.ipv4()}')
  15. print(f'IPv6: {faker.ipv6()}')
  16. print(f'MAC address: {faker.mac_address()}')
  17. print('------------------------------------')
  18. print(f'Slug: {faker.slug()}')
  19. print(f'Image URL: {faker.image_url()}')

该示例显示了各种与互联网相关的数据,包括电子邮件,域名,信息,IP 地址和 URL。

  1. $ ./internet.py
  2. Email: hescobar@acevedo.info
  3. Safe email: jonesgregory@example.net
  4. Free email: zchambers@yahoo.com
  5. Company email: paulbailey@gordon-woods.com
  6. ------------------------------------
  7. Host name: desktop-12.rodriguez-underwood.com
  8. Domain name: henry.com
  9. Domain word: davis
  10. TLD: com
  11. ------------------------------------
  12. IPv4: 192.31.48.26
  13. IPv6: 75cd:2c43:37f5:774c:dd:5a2f:ae5d:bfc9
  14. MAC address: 3d:b1:39:ec:c6:53
  15. ------------------------------------
  16. Slug: of-street-fight
  17. Image URL: https://placeimg.com/311/871/any

这是一个示例输出。

Faker 日期和时间

Faker 有很多伪造日期和时间值的方法。

date_time.py

  1. #!/usr/bin/env python
  2. from faker import Faker
  3. faker = Faker()
  4. print(f'Date of birth: {faker.date_of_birth()}')
  5. print(f'Century: {faker.century()}')
  6. print(f'Year: {faker.year()}')
  7. print(f'Month: {faker.month()}')
  8. print(f'Month name: {faker.month_name()}')
  9. print(f'Day of week: {faker.day_of_week()}')
  10. print(f'Day of month: {faker.day_of_month()}')
  11. print(f'Time zone: {faker.timezone()}')
  12. print(f'AM/PM: {faker.am_pm()}')

第一个示例显示了伪造的生日,日期时间部分,时区和 AM/PM 方法。

  1. $ date_time.py
  2. Date of birth: 2008-08-07
  3. Century: IV
  4. Year: 1981
  5. Month: 05
  6. Month name: January
  7. Day of week: Saturday
  8. Day of month: 26
  9. Time zone: Asia/Oral
  10. AM/PM: AM

这是一个示例输出。

datetime2.py

  1. #!/usr/bin/env python
  2. from faker import Faker
  3. faker = Faker()
  4. print(f'Datetime this century: {faker.date_time_this_century()}')
  5. print(f'Datetime this decade: {faker.date_time_this_decade()}')
  6. print(f'Datetime this year: {faker.date_time_this_year()}')
  7. print(f'Datetime this month: {faker.date_time_this_month()}')
  8. print('-------------------------')
  9. print(f'Date this century: {faker.date_this_century()}')
  10. print(f'Date this decade: {faker.date_this_decade()}')
  11. print(f'Date this year: {faker.date_this_year()}')
  12. print(f'Date this month: {faker.date_this_month()}')
  13. print('-------------------------')
  14. TOTAL_SECONDS = 60*60*24*2 # two days
  15. series = faker.time_series(start_date='-12d', end_date='now', precision=TOTAL_SECONDS)
  16. for val in series:
  17. print(val[0])

第二个示例显示了用于生成当前世纪,十年,年份或月份中的日期时间值的方法。 它还包括时间序列值的生成。

  1. $ date_time2.py
  2. Datetime this century: 2013-08-06 23:42:47
  3. Datetime this decade: 2010-02-15 01:08:34
  4. Datetime this year: 2019-03-10 05:32:42
  5. Datetime this month: 2019-04-06 10:13:53
  6. -------------------------
  7. Date this century: 2014-11-04
  8. Date this decade: 2018-03-07
  9. Date this year: 2019-02-07
  10. Date this month: 2019-04-04
  11. -------------------------
  12. 2019-03-26 16:16:49
  13. 2019-03-28 16:16:49
  14. 2019-03-30 16:16:49
  15. 2019-04-01 16:16:49
  16. 2019-04-03 16:16:49
  17. 2019-04-05 16:16:49

这是一个示例输出。

datetime3.py

  1. #!/usr/bin/env python
  2. from faker import Faker
  3. faker = Faker()
  4. print(f'Unix time: {faker.unix_time()}')
  5. print(f'Datetime: {faker.date_time()}')
  6. print(f'iso8601: {faker.iso8601()}')
  7. print(f'Date: {faker.date()}')
  8. print(f'Time: {faker.time()}')
  9. print('-------------------------')
  10. print(f"Datetime between: {faker.date_time_between(start_date='-15y', end_date='now')}")
  11. print(f"Date between: {faker.date_between()}")
  12. print('-------------------------')
  13. print(f"Future datetime: {faker.future_datetime()}")
  14. print(f"Future date: {faker.future_date()}")
  15. print(f"Past datetime: {faker.past_datetime()}")
  16. print(f"Past date: {faker.past_date()}")

第三个示例显示了用于各种日期时间格式,获取选定范围的日期时间值以及生成未来或过去值的方法。

  1. $ date_time3.py
  2. Unix time: 1389138339
  3. Datetime: 1988-01-24 09:16:09
  4. iso8601: 2014-04-22T04:19:18
  5. Date: 2009-05-01
  6. Time: 12:07:51
  7. -------------------------
  8. Datetime between: 2011-03-18 21:00:23
  9. Date between: 1992-07-09
  10. -------------------------
  11. Future datetime: 2019-04-11 13:36:02
  12. Future date: 2019-04-14
  13. Past datetime: 2019-03-21 12:27:20
  14. Past date: 2019-03-22

这是一个示例输出。

用 Faker 生成 XML 数据

在以下示例中,我们使用 Faker 和 Jinja2 模板生成 XML 数据。 XML 文件将包含用户。

  1. $ pip install jinja2

我们安装 Jinja2 模板引擎。

fake_xml.py

  1. #!/usr/bin/env python3
  2. from jinja2 import Environment, FileSystemLoader
  3. from faker import Faker
  4. class User:
  5. def __init__(self, first_name, last_name, occupation):
  6. self.first_name = first_name
  7. self.last_name = last_name
  8. self.occupation = occupation
  9. faker = Faker()
  10. users = []
  11. for _ in range(10):
  12. first_name = faker.first_name()
  13. last_name = faker.last_name()
  14. occupation = faker.job()
  15. user = User(first_name, last_name, occupation)
  16. users.append(user)
  17. file_loader = FileSystemLoader('templates')
  18. env = Environment(loader=file_loader)
  19. template = env.get_template('users.xml.j2')
  20. output = template.render(users=users)
  21. print(output, file=open('users.xml', 'w'))

该程序将生成十个用户的列表。 该列表将传递到 Jinja2 模板进行处理。 模板位于templates目录中。 生成的内容被写入users.xml文件。

templates/users.xml.j2

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <users>
  3. {% for user in users %}
  4. <user id="{{ loop.index }}">
  5. <firstname>{{ user.first_name }}</firstname>
  6. <lastname>{{ user.last_name }}</lastname>
  7. <occupation>{{ user.occupation }}</occupation>
  8. </user>
  9. {% endfor %}
  10. </users>

在模板中,我们使用for指令来处理用户列表。

在本教程中,我们使用 Python Faker 在 Python 中生成伪数据。

您可能也对以下相关教程感兴趣: Python Jinja 教程Python 教程,或列出所有 Python 教程

{% endraw %}