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