6. Телефоны одного формата.

(открыть в новой вкладке)

Условие:

Программа должна открыть файл "Сложный_список_телефонов.txt". Привести все телефоны к одному формату и вывести на экран все телефоны без повторов.
⇒ Сложный список телефонов

Код:

import re

# функция приводит все телефоны к одному виду
def my_def(i):
    i = [x for x in i if x != ""]                                                         # уберём пустые элементы
    result = "+7"
    for x in i:
        result += x
    return result


buf = open("./Сложный_список_телефонов.txt", "r")
s = buf.read()

regex_obj = re.compile(r"""[78]\s\((\d{3})\)\s(\d{3})\s(\d{2})\s(\d{2})                   # составим регулярное выражение для поиска телефона вида: "8 (999) 031 31 32"
                       | [78](\d{10})                                                     # составим регулярное выражение для поиска телефона вида: " 79005552543"
                       | [78]\s\((\d{3})\)\s(\d{3})\-(\d{2})\-(\d{2})                     # составим регулярное выражение для поиска телефона вида: "7 (999) 031-31-32"
                       | [78]\s\((\d{3})\)\s(\d{7})                                       # составим регулярное выражение для поиска телефона вида: "7 (499) 7816448"
                       | [78]\s(\d{3})\s(\d{3})\s(\d{2})\s(\d{2})                         # составим регулярное выражение для поиска телефона вида: "8 916 599 87 17"
                       | [78]\-(\d{3})-(\d{3})-(\d{2})\-(\d{2})                           # составим регулярное выражение для поиска телефона вида: "7-499-717-78-04"
                       | \+\d(\d{10})                                                     # составим регулярное выражение для поиска телефона вида: "+79158611430"
                       """, re.VERBOSE)                   
x = regex_obj.findall(s)                                                                  # список телефонов, получился список кортежей вида [('999', '031', '31', '32', ''), ('', '', '', '', '9005552543')]

x = {my_def(i) for i in x}                                                                # подготовит множество телефонов в нужном виде и без дубликатов

# выведем телефоны на экран
count = 1
for i in x:
    print(f"№ {count}:   {i}")
    count += 1