Python Faker 电话号码格式

问题描述 投票:0回答:2

我最近开始与 Faker 合作,因为它能够将数据本地化到各个区域。当尝试生成本地化电话号码时,我意识到电话号码有多种格式,如所示here。我想知道是否可以将所有生成的电话号码都设置为如下格式:(+91 ##########),无论国家/地区代码如何,它都保持不变。谢谢!

python faker
2个回答
4
投票

不幸的是,

Faker
没有内置函数来执行此操作。

您有两个选择。

自己写函数,例如:

def fake_phone_number(fake: Faker) -> str:
    return f'+91 {fake.msisdn()[3:]}'
from faker import Faker

def main():
    fake = Faker()
    print(fake_phone_number(fake))

或者创建一个适当的提供程序并建议添加它:https://faker.readthedocs.io/en/master/communityproviders.html

Python src MSISDN。 什么是MSISDN

或者

from faker import Faker
from faker.providers.phone_number import Provider


class IndiaPhoneNumberProvider(Provider):
    """
    A Provider for phone number.
    """

    def india_phone_number(self):
        return f'+91 {self.msisdn()[3:]}'


def main():
    fake = Faker()
    fake.add_provider(IndiaPhoneNumberProvider)
    print(fake.india_phone_number())

3
投票

您可以使用 faker 的 hindi Indian 提供商,它会生成大部分带有 +91 的号码,但不是全部:

带有

faker
factoryboy.Faker
的代码示例:

import factory
from faker import Faker

fake = Faker(locale="hi_IN")

fake.phone_number()

# with factory-boy's faker
class New(factory.DictFactory):

    phone = factory.Faker("phone_number", locale="hi_IN")

New()

使用效果:

print(fake.phone_number())
>> +91 9018742635
print(New())
>> {'phone': '+91 1489998444'}

如果你想确保每个数字都有+91,你需要用

factoryboy
进行调整,或者用解析函数包裹
fake.phone_number

一个巧妙的解决方案可能是使用名为 phonenumbers 的库,如下所示:

import phonenumbers
from faker import Faker

fake = Faker(locale="hi_IN")
number = fake.phone_number()
num_obj = phonenumbers.parse(number, "IN")
interanational_IN_number = phonenumbers.format_number(num_obj, phonenumbers.PhoneNumberFormat.INTERNATIONAL)
print(interanational_IN_number)

这应该在大多数情况下都有效,除了以

091
开头的数字 - 它们应该有两个前导零才能正确识别(0091),解决这个极端情况,然后你就可以开始了。

© www.soinside.com 2019 - 2024. All rights reserved.