我在 python 中遇到电话号码格式问题

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

我正在尝试格式化来自 Faker API 的虚假数据。我正在使用 pandas 将其存储到数据框中。我已经弄清楚如何删除和替换任何错误,例如无间距、间距不正确、删除括号、国家/地区代码和扩展名。我遇到的主要问题是当数字像这样出现时:

xxxxxx-xxxx
而不是
xxx-xxx-xxxx

这是我的代码:

from faker import Faker
import pandas as pd

fake = Faker()
name = []
address = []
number = []
ssn = []

for i in range(100):
    name.append(fake.name())
    address.append(fake.address().replace('\n', " "))
    ssn.append(fake.ssn())
    phone_number = fake.phone_number().split('x')[0].replace('.',"-").replace("(",'').replace(')','').replace(' ','')
    # How do to deal with the opposite of ^
    if phone_number.startswith('+1'):
        phone_number = phone_number[2:]
    if phone_number.startswith('1'):
        phone_number = phone_number[1:]
    if phone_number.startswith('001'):
        phone_number = phone_number[3:]
    
    phone_number = phone_number.lstrip('-')
    
    if phone_number.isdigit() and len(phone_number) == 12: #10 or 12 work here for some reason, but I get diff. formats
        phone_number = f"{phone_number[:3]}-{phone_number[3:6]}-{phone_number[6:]}"
    else:
        phone_number = phone_number
    
    number.append(phone_number)

df = pd.DataFrame({'Name':name, 'Address':address,'Phone Number':number, 'SSN':ssn})
df

不太确定我的问题出在哪里。

我最初认为这是长度,或者它是否被读取为 int 而不是字符串,但是当我这样做时:

    if phone_number.isdigit() and len(phone_number) == 12:
        phone_number = f"{phone_number[:3]}-{phone_number[3:6]}-{phone_number[6:]}"
    elif len(phone_number) != 12:
        phone_number = f"{phone_number[:3]}-{phone_number[3:6]}{phone_number[6:]}"
    else:
        phone_number = phone_number

它的格式就像

xxx-xxxxxxx


如果我这样做:

    if phone_number.isdigit() and len(phone_number) == 10:
        phone_number = f"{phone_number[:3]}-{phone_number[3:6]}-{phone_number[6:]}"
    elif len(phone_number) != 10:
        phone_number = f"{phone_number[:3]}-{phone_number[3:6]}{phone_number[6:]}"
    else:
        phone_number = phone_number

然后数字的格式如下

xxx--xxx-xxxx


    if phone_number.isdigit() and len(phone_number) == 10:
        phone_number = f"{phone_number[:3]}-{phone_number[3:6]}-{phone_number[6:]}"
    else:
        phone_number = phone_number

如果我删除

elif
那么我会得到这个输出:'xxxxxx-xxxx'。


我几乎陷入困境,不知道该怎么办。

python pandas data-analysis faker
1个回答
0
投票

在此代码中:

    if phone_number.startswith('+1'):
        phone_number = phone_number[2:]
    if phone_number.startswith('1'):
        phone_number = phone_number[1:]
    if phone_number.startswith('001'):
        phone_number = phone_number[3:]

您将每个测试应用于

phone_number
之前分配的结果。因此,如果电话号码以
+11
开头,第一个
if
块将删除
+1
,然后第二个测试将成功并删除
1

您应该使用

elif
,这样您只测试原始数字,而不进行增量检查。

    if phone_number.startswith('+1'):
        phone_number = phone_number[2:]
    elif phone_number.startswith('1'):
        phone_number = phone_number[1:]
    elif phone_number.startswith('001'):
        phone_number = phone_number[3:]

另一种选择是使用正则表达式来删除以下任何前缀:

    phone_number = re.sub(r'^(\+1|1|001)', '', phone_number)

我还没有查看你其余的代码,可能还有更多问题。

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