【问题标题】:Generating email address using first name and last name in Faker python在Faker python中使用名字和姓氏生成电子邮件地址
【发布时间】:2021-09-22 04:03:35
【问题描述】:

我正在尝试生成一个包含人员数据的 pandas 数据集。我正在使用 Python 的 Faker 库。有没有办法使用名字和姓氏生成有效的电子邮件地址?

import pandas as pd
import numpy as np
import os
import random
from faker import Faker

def faker_categorical(num=1, seed=None):
    np.random.seed(seed)
    fake.seed_instance(seed)
    output = []
    for x in range(num):
      gender = np.random.choice(["M", "F"], p=[0.5, 0.5])
      output.append(
        {
            "First name": fake.first_name_male() if gender=="M" else  
                                                 fake.first_name_female(),
            "Last name": fake.last_name(),
            "E-mail": fake.ascii_email(),  
        })
    return output

【问题讨论】:

    标签: email faker


    【解决方案1】:

    您可以使用 Faker 的 domain_name 方法和字符串格式以及已生成的值:

    first_name = fake.first_name_male() if gender =="M" else fake.first_name_female()
    last_name = fake.last_name()
    
    output.append(
        {
         "First name": first_name,
         "Last Name": last_name,
         "E-mail": f"{first_name}.{last_name}@{fake.domain_name()}"
        }
    )
    

    在更完整的方法中,您可以将factoryboy 添加到组合中:

    from factory import DictFactory, LazyAttribute
    from factory.fuzzy import FuzzyChoice
    from factory import Faker
    
    class PersonDataFactory(DictFactory):
    
        first = LazyAttribute(lambda obj: fake.first_name_male() if obj._gender == "M" else fake.first_name_female())
        last = Faker("last_name")
        email = LazyAttribute(lambda obj: f"{obj.first}.{obj.last}@{fake.domain_name()}")
        _gender = FuzzyChoice(("M", "F"))
    
        class Meta:
            exclude = ("_gender",)
            rename = {"first": "First Name", "last": "Last Name", "email": "E-mail"}
    
    
    PersonDataFactory()
    
    

    这将导致类似:

    {'First Name': 'Albert',
     'Last Name': 'Martinez',
     'E-mail': 'Albert.Martinez@wheeler.com'}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      • 1970-01-01
      • 2017-03-05
      相关资源
      最近更新 更多