Цель - написать программу которая будет анализировать детализацию звонков, и в том числе выдавать название сотового оператора и его регион по искомому абонентскому номеру.
Нашел на просторах интернета файлы с данными сотовых операторов и провайдеров IP-телефонии, где информация предоставлена в следующем формате:
АВС/ DEF; От; До; Емкость; Оператор; Регион
900; 0000000; 0061999; 62000; ООО "Т2 Мобайл"; Краснодарский край
900; 0062000; 0062999; 1000; ООО "Т2 Мобайл"; Ростовская обл.
900; 0063000; 0099999; 37000; ООО "Т2 Мобайл"; Краснодарский край
и таких 4 файла по 8000, 12000, 16000 и 28000 строк соответственно.
Решил создать словарь с данными по следующему типу:
data = {
"900" : {
((str(j) for j in range(int(0), int(61999) + 1)), 'ООО "Т2 Мобайл"', 'Краснодарский край'),
((str(j) for j in range(int(62000), int(62999) + 1)), 'ООО "Т2 Мобайл"', 'Ростовская обл.'),
((str(j) for j in range(int(63000), int(99999) + 1)), 'ООО "Т2 Мобайл"', 'Краснодарский край')
},
"901" : {
((str(j) for j in range(int(0), int(9999) + 1)), 'ООО "Т2 Мобайл"', 'Ростовская обл.'),
((str(j) for j in range(int(10000), int(19999) + 1)), 'ООО "Т2 Мобайл"', 'Республика Северная Осетия - Алания'),
((str(j) for j in range(int(20000), int(99999) + 1)), 'ООО "Т2 Мобайл"', 'Краснодарский край'),
((str(j) for j in range(int(100000), int(134999) + 1)), 'ООО "Т2 Мобайл"', 'Республика Адыгея'),
((str(j) for j in range(int(135000), int(135049) + 1)), 'ООО "Т2 Мобайл"', 'Пензенская обл.')
}
}
Путем дальнейшего обращения к ключу и перебору его значений до момента пока не найдется нужное таки получается определить оператора и регион по искомому абонентскому номеру, но есть проблема: из-за большого объема данных эта функция выполняется примерно:
8-12 секунд для номеров по типу 900-1234567
12-15 секунд для номеров по типу 812-1234567
15-20 секунд для номеров по типу 345-1234567
свыше 20 секунд для номеров по типу 495-1234567...
Если учесть, что в детализации звонков будет порядка 100-1000 номеров (а то и больше), которые нужно проанализировать, то программа зависнет на очень долго..
Отсюда вопрос - как можно сократить время работы?? Может как-то изменить алгоритм или подключить дополнительные библиотеки? Или есть принципиально другой вариант решения поставленной подзадачи???
Думал над API, но у них есть ограничения по общему количеству запросов, а также по количеству запросов в секунду, поэтому этот вариант отпал..
Надеюсь на Вашу помощь, заранее спасибо!