在Python中格式化电话号码的最佳方法是什么?

时间:2011-08-14 16:33:55

标签: python formatting format standards libs

如果我所拥有的是一个10位或更多位的字符串,我该如何将其格式化为电话号码?

一些微不足道的例子:

555-5555
555-555-5555
1-800-555-5555

我知道这些不是格式化它们的唯一方法,如果我自己做的话,我很可能会把事情搞清楚。是否有python库或格式化电话号码的标准方法?

5 个答案:

答案 0 :(得分:37)

for library:phonenumbers(pypisource

  

Google的公共库的Python版本,用于解析,格式化,存储和验证国际电话号码。

自述文件不足,但我发现代码记录良好。

答案 1 :(得分:23)

看起来像你的例子格式化了三个数字组除了最后一个,你可以编写一个简单的函数,使用千位分隔符并添加最后一位数字:

>>> def phone_format(n):                                                                                                                                  
...     return format(int(n[:-1]), ",").replace(",", "-") + n[-1]                                                                                                           
... 
>>> phone_format("5555555")
'555-5555'
>>> phone_format("5555555")
'555-5555'
>>> phone_format("5555555555")
'555-555-5555'
>>> phone_format("18005555555")
'1-800-555-5555'

答案 2 :(得分:4)

这是一个改编自utdemir's solutionthis solution的版本,可以使用Python 2.6,作为"," formatter是Python 2.7中的新功能。

def phone_format(phone_number):
    clean_phone_number = re.sub('[^0-9]+', '', phone_number)
    formatted_phone_number = re.sub("(\d)(?=(\d{3})+(?!\d))", r"\1-", "%d" % int(clean_phone_number[:-1])) + clean_phone_number[-1]
    return formatted_phone_number

答案 3 :(得分:1)

您可以使用库 clean_phone() 中的函数 DataPrep。使用 pip install dataprep 安装。

>>> from dataprep.clean import clean_phone
>>> df = pd.DataFrame({'phone': ['5555555', '5555555555', '18005555555']})
>>> clean_phone(df, 'phone')
Phone Number Cleaning Report:                                                   
    3 values cleaned (100.0%)
Result contains 3 (100.0%) values in the correct format and 0 null values (0.0%)
         phone     phone_clean
0      5555555        555-5555
1   5555555555    555-555-5555
2  18005555555  1-800-555-5555

答案 4 :(得分:0)

一个简单的解决方案可能是从后面开始并在四个数字后插入连字符,然后执行三个组,直到到达字符串的开头。我不知道内置函数或类似的东西。

您可能会发现这有用: http://www.diveintopython3.net/regular-expressions.html#phonenumbers

如果您接受用户输入的电话号码,正则表达式将非常有用。我不会使用上面链接所遵循的确切方法。更简单的东西,比如剥离数字,可能更容易,同样好。

此外,将逗号插入数字是一个类似的问题,已在其他地方有效解决,可以适应这个问题。