web-dev-qa-db-fra.com

Quelle est la meilleure façon de formater un numéro de téléphone en Python?

Si tout ce que j'ai est une chaîne de 10 chiffres ou plus, comment puis-je la formater comme un numéro de téléphone?

Quelques exemples triviaux:

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

Je sais que ce ne sont pas les seuls moyens de les formater, et il est très probable que je laisserai les choses de côté si je le fais moi-même Existe-t-il une bibliothèque Python ou un moyen standard de formater les numéros de téléphone?

19
Joe

pour la bibliothèque: numéros de téléphone ( pypi , source )

Version Python de la bibliothèque commune de Google pour l'analyse, le formatage, le stockage et la validation des numéros de téléphone internationaux.

Le readme est insuffisant, mais j'ai trouvé le code bien documenté.

36
kusut

On dirait que vos exemples sont formatés avec des groupes de trois chiffres sauf le dernier. Vous pouvez écrire une fonction simple, utiliser des milliers de séparateurs et ajouter le dernier chiffre:

>>> 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'
22
utdemir

En voici une adaptée de la solution utdemir et cette solution qui fonctionnera avec Python 2.6, car le formatage "," est une nouveauté de 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
Jon Mabe

Une solution simple pourrait être de commencer à l’arrière et d’insérer le trait d’union après quatre chiffres, puis de créer des groupes de trois jusqu’au début de la chaîne. Je ne suis pas au courant d'une fonction intégrée ou de quelque chose comme ça.

Vous pourriez trouver cela utile: http://www.diveintopython3.net/regular-expressions.html#phonenumbers

Les expressions régulières seront utiles si vous acceptez la saisie de numéros de téléphone par l'utilisateur. Je n'utiliserais pas l'approche exacte suivie sur le lien ci-dessus. Quelque chose de plus simple, comme taper des chiffres, est probablement plus facile et tout aussi bien.

De plus, l'insertion de virgules dans les nombres est un problème analogue qui a été résolu efficacement ailleurs et qui pourrait être adapté à ce problème.

0
ChrisP