Source code for utils.faker_utils

from faker import Faker
from faker.providers import DynamicProvider

providers = [DynamicProvider(
    provider_name="major",
    elements=[
        "计算机科学", "软件工程", "人工智能", 
        "电子信息工程", "机械工程", "土木工程",
        "金融学", "经济学", "会计学",
        "临床医学", "护理学", "药学",
        "法学", "新闻传播学", "教育学",
        "数学与应用数学", "物理学", "化学",
        "英语", "日语", "法语",
        "美术学", "音乐学", "舞蹈学"
    ]
), DynamicProvider(
    provider_name="color_name_cn",
    elements=[
        "红色", "橙色", "黄色", "绿色", "蓝色",
        "靛蓝", "紫色", "粉色", "棕色", "灰色",
        "黑色", "白色", "金色", "银色", "青色",
        "珊瑚色", "栗色", "橄榄色", "藏青色", "茶色",
        "米色", "卡其色", "琥珀色", "翡翠绿", "天蓝色",
        "桃红色", "紫红色", "柠檬黄", "象牙白", "咖啡色"
    ]
), DynamicProvider(
    provider_name="chinese_drink",
    elements=[
        "可口可乐", "雪碧", "芬达", "冰红茶", "绿茶",
        "乌龙茶", "珍珠奶茶", "拿铁咖啡", "美式咖啡", "橙汁",
        "苹果汁", "葡萄汁", "柠檬水", "矿泉水", "苏打水",
        "椰汁", "杏仁露", "酸梅汤", "王老吉", "红牛"
    ]
), DynamicProvider(
    provider_name="pet_category",
    elements=[
        "猫", "狗", "仓鼠", "兔子", "鹦鹉",
        "金鱼", "乌龟", "蜥蜴", "蛇", "蜘蛛",
        "荷兰猪", "龙猫", "刺猬", "蜜袋鼯", "宠物猪",
        "八哥", "鸽子", "孔雀鱼", "蝾螈", "变色龙"
    ]
), DynamicProvider(
    provider_name="fruit_cn",
    elements=[
        "苹果", "香蕉", "橙子", "梨", "葡萄",
        "草莓", "西瓜", "桃子", "李子", "菠萝",
        "芒果", "猕猴桃", "樱桃", "蓝莓", "石榴",
        "柚子", "柠檬", "火龙果", "荔枝", "龙眼",
        "山竹", "榴莲", "椰子", "木瓜", "杨桃",
        "百香果", "桑葚", "无花果", "柿子", "哈密瓜"
    ]
), DynamicProvider(
    provider_name="hobby_cn",
    elements=[
        # 艺术类
        "摄影", "绘画", "书法", "雕塑", "陶艺",
        # 音乐类
        "钢琴", "吉他", "小提琴", "声乐", "作曲",
        # 舞蹈类
        "芭蕾舞", "街舞", "民族舞", "拉丁舞", "现代舞",
        # 运动类
        "篮球", "足球", "羽毛球", "游泳", "瑜伽",
        # 手工类
        "编织", "木工", "烘焙", "插花", "手工皮具",
        # 其他
        "阅读", "写作", "旅行", "棋牌", "园艺"
    ]
), DynamicProvider(
    provider_name="foreign_name_cn",
    elements=[
        # 男性常见译名
        "约翰", "迈克尔", "大卫", "詹姆斯", "罗伯特",
        "威廉", "理查德", "查尔斯", "约瑟夫", "托马斯",
        "丹尼尔", "马修", "安东尼", "唐纳德", "史蒂文",
        "保罗", "马克", "乔治", "肯尼思", "爱德华",
        
        # 女性常见译名
        "玛丽", "安娜", "丽莎", "米歇尔", "桑德拉",
        "艾米", "杰西卡", "莎拉", "金伯利", "伊丽莎白",
        "玛格丽特", "艾玛", "朱莉娅", "凯瑟琳", "南希",
        "劳拉", "维多利亚", "奥利维亚", "索菲娅", "艾米丽",
        
        # 中性译名
        "克里斯", "亚历克斯", "泰勒", "乔丹", "凯瑞"
    ]
), DynamicProvider(
    provider_name="product_cn",
    elements=[
        # 食品类
        "奶油饼干", "巧克力蛋糕", "草莓冰淇淋", "全麦面包", "芝士披萨",
        "牛肉干", "水果罐头", "酸奶", "薯片", "坚果礼盒",
        # 饮料类
        "冰红茶", "拿铁咖啡", "鲜榨橙汁", "珍珠奶茶", "气泡水",
        # 日用品类
        "洗衣液", "洗发水", "牙膏", "抽纸", "保鲜膜",
        # 电子产品
        "无线耳机", "智能手表", "蓝牙音箱", "充电宝", "电子书阅读器",
        # 服饰类
        "纯棉T恤", "牛仔裤", "运动鞋", "羽绒服", "针织帽"
    ]
), DynamicProvider(
    provider_name="car_brand",
    elements=[
        # 德系品牌
        "奥迪", "宝马", "奔驰", "大众", "保时捷",
        # 日系品牌
        "丰田", "本田", "日产", "马自达", "雷克萨斯",
        # 美系品牌
        "福特", "雪佛兰", "凯迪拉克", "特斯拉", "林肯",
        # 韩系品牌
        "现代", "起亚", "捷尼赛思",
        # 国产品牌
        "比亚迪", "吉利", "长城", "长安", "红旗",
        # 意大利品牌
        "法拉利", "兰博基尼", "玛莎拉蒂", "阿尔法·罗密欧",
        # 英国品牌
        "路虎", "捷豹", "宾利", "劳斯莱斯",
        # 法系品牌
        "标致", "雪铁龙", "雷诺", "DS"
    ]
), DynamicProvider(
    provider_name="occupation_cn",
    elements=[
        # 医疗健康类
        "医生", "护士", "药剂师", "牙医", "心理医生",
        # 教育类
        "教师", "大学教授", "幼儿园老师", "校长", "辅导员",
        # 科技类
        "软件工程师", "数据分析师", "人工智能工程师", "网络安全专家", "系统架构师",
        # 金融类
        "会计师", "金融分析师", "投资顾问", "银行职员", "保险经纪人",
        # 艺术创意类
        "设计师", "摄影师", "作家", "画家", "音乐家",
        # 服务行业
        "厨师", "服务员", "理发师", "导游", "健身教练",
        # 管理类
        "项目经理", "人力资源经理", "运营总监", "市场经理", "销售经理",
        # 蓝领职业
        "电工", "木匠", "水管工", "建筑工人", "汽车修理工"
    ]
), DynamicProvider(
    provider_name="metal_ore",
    elements=[
        "铁矿石", "铜矿石", "铝土矿", "铅锌矿", "镍矿",
        "锡矿石", "钨矿石", "钼矿石", "锰矿石", "铬铁矿",
        "钛铁矿", "钒钛磁铁矿", "金矿石", "银矿石", "铂矿石",
        "稀土矿", "铀矿石", "钴矿石", "锑矿石", "汞矿石"
    ]
), DynamicProvider(
    provider_name="flower_name",
    elements=[
        "樱花", "桃花", "杏花", "海棠", "迎春花", "郁金香",
        "玫瑰", "百合", "茉莉", "栀子花", "向日葵", "睡莲",
        "菊花", "桂花", "芙蓉", "彼岸花", "金盏花", "木芙蓉",
        "腊梅", "山茶", "一品红", "君子兰", "仙客来", "水仙"
    ]
), DynamicProvider(
    provider_name="sport",
    elements=[
        "百米跑", "跳高", "跳远", "铅球", "标枪", 
        "110米栏", "撑杆跳高", "三级跳远", "马拉松", "链球",
        "足球", "篮球", "排球", "乒乓球", "羽毛球",
        "网球", "棒球", "垒球", "手球", "曲棍球",
        "自由泳", "蛙泳", "蝶泳", "仰泳", "跳水",
        "水球", "花样游泳", "皮划艇", "赛艇", "帆船",
        "自由体操", "鞍马", "吊环", "跳马", "双杠",
        "单杠", "高低杠", "平衡木", "艺术体操", "蹦床",
        "举重", "拳击", "击剑", "跆拳道", "柔道",
        "摔跤", "射击", "射箭", "自行车", "马术"
    ]
), DynamicProvider(
    provider_name="office_supplies",
    elements=[
        '手机', '笔记本', '鼠标', 'U盘', '签字笔',
        '订书机', '胶带', '便签纸', '计算器', '耳机',
        '移动硬盘', '充电器', '墨水', '文件夹', '便利贴'
    ]
)]
from faker import Faker

[docs] def get_faker(num, provider_name, locale='zh_CN', seed=None): """ Generate a specified number of unique fake data entries using Faker. Parameters: num: The number of data entries to generate. provider_name: Name of the provider (also the method name to call). providers: List of provider classes to add. locale: Locale setting (default is Chinese). seed: Random seed. Returns: A list of generated unique data. Exceptions: AttributeError: When the provider_name does not exist. ValueError: When it is not possible to generate enough unique data. """ fake = Faker(locale) if seed is not None: fake.seed(seed) # 添加自定义Providers for provider in providers: fake.add_provider(provider) # 检查provider是否存在 if not hasattr(fake, provider_name): raise AttributeError(f"Faker has no provider named '{provider_name}'") method = getattr(fake, provider_name) results = set() max_attempts = num * 100 # 最大尝试次数 attempts = 0 # 生成唯一数据 while len(results) < num and attempts < max_attempts: data = method() results.add(data) attempts += 1 # 检查是否生成足够数据 if len(results) < num: raise ValueError( f"Only generated {len(results)}/{num} unique elements after {max_attempts} attempts. " f"Try increasing max attempts or using a different provider." ) return list(results)