2. Коды телефонов 2.

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

Условие:

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

Код:

import re

# функция достаёт элемент (код города) из кортежа
def my_def(i):
    return [a for a in i if a != ""][0]
    

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

regex_obj = re.compile(r"""\s\((\d{3})\)                   # составим регулярное выражение для поиска кода в телефоне вида: " (999)"
                       | \s[\d]{1}([\d]{3})[\d]{7}         # составим регулярное выражение для поиска кода в телефоне вида: " 79005552543"
                       | [78]\s([\d]{3})\s                 # составим регулярное выражение для поиска кода в телефоне вида: "8 916 "
                       | \+[78]\-([\d]{3})                 # составим регулярное выражение для поиска кода в телефоне вида: "+7-499"
                       | [78]\-([\d]{3})\-                 # составим регулярное выражение для поиска кода в телефоне вида: "7-960-"
                       | \'[78]([\d]{3})                   # составим регулярное выражение для поиска кода в телефоне вида: "'7916"
                       | \+[78]([\d]{3})\d{7}              # составим регулярное выражение для поиска кода в телефоне вида: "+7915"
                       """, re.VERBOSE)                   
x = regex_obj.findall(s)                                   # список кодов городов всех телефонов, получился список кортежей вида [('999', '', ''), ('', '', '031'), ('', '900', '')]
x = {my_def(i) for i in x}                                 # убирает повторы городов

print()
print(f"Коды телефонов: {x}.")
print()