You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用CSV文件自定义Python Faker的数据提供者?

自定义Faker提供者替换澳大利亚邮政编码

1. 准备CSV文件

先创建一个存储澳式邮编的CSV文件,命名为au_postcodes.csv,内容示例(每行一个邮编):

2000
2001
3000
3001
4000
4001

2. 基础实现代码

from faker import Faker
from faker.providers import BaseProvider

# 读取CSV中的邮编列表
def load_au_postcodes(csv_path):
    with open(csv_path, 'r') as file:
        # 读取每行并去除换行符、过滤空行
        postcodes = [line.strip() for line in file if line.strip()]
    return postcodes

# 自定义邮编提供者
class AUPostcodeProvider(BaseProvider):
    def __init__(self, generator, postcode_list):
        super().__init__(generator)
        self.postcodes = postcode_list
    
    def postcode(self):
        # 从自定义列表随机返回一个邮编
        return self.random_element(self.postcodes)

# 初始化Faker实例(指定澳大利亚本地化,保证其他地址数据符合澳式风格)
fake = Faker('en_AU')

# 加载自定义邮编列表
au_postcodes = load_au_postcodes('au_postcodes.csv')

# 添加自定义提供者,覆盖默认的postcode方法
fake.add_provider(AUPostcodeProvider(fake, au_postcodes))

# 测试生成结果
for _ in range(5):
    print(f"随机澳式邮编: {fake.postcode()}")

3. 扩展:生成关联列(邮编+对应城市)

如果需要生成关联的邮编和城市数据,可以把CSV改成多列格式,比如au_postcodes_cities.csv:

2000,Sydney
2001,Sydney
3000,Melbourne
3001,Melbourne
4000,Brisbane
4001,Brisbane

对应的代码修改如下:

from faker import Faker
from faker.providers import BaseProvider
import csv

# 读取邮编-城市关联数据
def load_postcode_city_pairs(csv_path):
    pairs = []
    with open(csv_path, 'r') as file:
        # 按行读取并拆分数据
        reader = csv.reader(file)
        for row in reader:
            if len(row) == 2:
                pairs.append((row[0].strip(), row[1].strip()))
    return pairs

# 自定义关联数据提供者
class AUPostcodeCityProvider(BaseProvider):
    def __init__(self, generator, pair_list):
        super().__init__(generator)
        self.pairs = pair_list
    
    def postcode(self):
        return self.random_element(self.pairs)[0]
    
    def get_postcode_city(self):
        # 返回关联的邮编和城市字典
        postcode, city = self.random_element(self.pairs)
        return {"postcode": postcode, "city": city}

# 初始化和使用
fake = Faker('en_AU')
au_pairs = load_postcode_city_pairs('au_postcodes_cities.csv')
fake.add_provider(AUPostcodeCityProvider(fake, au_pairs))

# 测试关联数据生成
for _ in range(3):
    data = fake.get_postcode_city()
    print(f"城市: {data['city']}, 邮编: {data['postcode']}")

内容的提问来源于stack exchange,提问作者Luke Parsons

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 08:05:14