Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Содержание ВКР / ВКР 2018. Малеев В.В. Разработка ПО для сегментации данных о телефонных вызовах в модуле Спайдер-FMS.pdf
Скачиваний:
81
Добавлен:
11.06.2022
Размер:
1.26 Mб
Скачать

Рис. 4.2 – Диаграмма компонентов ПО

4.2 Разработка кода

4.2.1Выбор языка программирования

Python – интерпретируемый высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода.

Python обладает динамической типизацией, автоматическим управлением памятью, динамическим разрешением имен, а также поддержкой различных парадигм программирования. К преимуществам языка также нужно отнести большое международное сообщество разработчиков и множество сторонних библиотек, позволяющих использовать Python при разработке ПО в разных отраслях.

Использование языка Python для разработки ПО позволит сократить время написания и отладки необходимых модулей.

35

4.2.2 Модуль CDR Filter

Модуль предоставляет функцию filter. Прототип функции:

f i l t e r ( i d i r , r _ f i e l d s , f i l t e r s , o d i r )

 

В качестве параметров функция принимает путь к папке (директории) с

 

.csv файлами (idir), выводимые поля (r_fields), накладываемые фильтры (filters),

 

путь к папке с выходными данными (odir). Параметр filters является словарем,

 

в котором могут быть как лямбда-выражения, так и функции для фильтрации

 

полей. Пример использования функции:

1

from c d r _ f i l t e r import f i l t e r

2

 

3def f i l t e r _ f u n c t i o n ( x ) :

4

return x == ’ abc ’

5

 

 

6

f i l t e r s

= {

7

0 :

lambda x : i n t ( x ) == 0 ,

81 : f i l t e r _ f u n c t i o n

9

}

10

 

11f i l t e r (

12i d i r = ’ . / f i l t e r _ i n p u t ’ ,

13r _ f i e l d s = [ 1 ] ,

14

f i l t e r s = f i l t e r s ,

15o d i r = ’ . / f i l t e r _ o u t p u t ’

16)

Для чтения и записи файлов формата csv используются функции стандартной библиотеки csv.reader, csv.writer соответственно. Выходными данными функции являются файлы, содержащие данные из строк, отфильтрованных с помощью параметра filters. В выходные файлы записываются значения полей, индексы которых указаны в параметре r_fields, поля разделены запятыми, названия выходных файлов соответствуют названиям входных файлов. Выходные файлы создаются в папке, путь к которой указан в параметре odir.

36

4.2.3Модуль RS Parser

Модуль предоставляет функцию parse_file. Определение функции:

1def p a r s e _ f i l e ( f i l e ) :

2i f f i l e . c l o s e d :

3

return

None

4

 

 

 

5

r e s u l t

= [ ]

 

6

f i l e . next ( )

 

7

 

 

 

8

f o r l i n e i n f i l e :

9

temp =

r s _ p a r s e r . __make_record ( l i n e )

10

i f

temp

i s not None :

11

 

r e s u l t . append ( temp )

12

 

 

 

13

return r e s u l t

В качестве параметров функция принимает объект типа file, в кодиров-

ке Windows 1251.

Результатом работы функции является массив объектов типа rs_record.

Поля класса rs_record представлены в таблице 4.1.

 

Таблица 4.1 – Поля класса rs_record

 

 

Название

Описание

 

 

prefix

ABC/DEF код

 

 

number_range

Значения начала и конца семизначного диапазона

 

 

capacity

Емкость диапазона

 

 

provider

Название оператора

 

 

region_name

Название региона

 

 

region_key

Код региона в соответствии с конституцией РФ

 

 

Объекты типа rs_record формируются в функции __make_record. Про-

тотип функции:

__make_record ( l i n e , debug = F a l s e )

37

 

В качестве параметров функция принимает строку (line), а также флаг

 

для вывода отладочной информации (debug). Поля в исходном файле разделе-

 

ны ‘;’, а их количество равно шести. Перед формированием выходного зна-

 

чения функции производится проверка количества полей в строке, после чего

 

происходит присвоение временным переменным значений полей, при этом

 

переменная number_range содержит 2 значения, соответствующие началу и

 

концу семизначного диапазона.

1

s p l i t _ l i n e = l i n e . s t r i p ( ’ \ t ’ ) . s p l i t ( ’ ; ’ )

2

 

3i f s p l i t _ l i n e :

4

i f l e n ( s p l i t _ l i n e ) < 6 :

5return None

6i f debug :

7

p r i n t s p l i t _ l i n e

 

 

8

 

 

 

 

 

9

p r e f i x = s p l i t _ l i n e [ 0 ] [ : 3 ]

10

number_range = ( s p l i t _ l i n e [ 1 ] [ 1 : 8 ] , s p l i t _ l i n e [ 2 ] [ 1 : 8 ] )

11

c a p a c i t y = s p l i t _ l i n e [ 3 ] [ 1 : 1 ]

12

p r o v i d e r = s p l i t _ l i n e [ 4 ] [ 1 : 1 ] . encode ( ’ u t f 8 ’ )

13

region_name = s p l i t _ l i n e [ 5 ] [ 1 : 1 ] . encode ( ’ u t f 8 ’ )

 

Для определения кода региона был составлен словарь, в котором в каче-

 

стве ключей использовуются ключевые слова в определении региона (напри-

 

мер, Крым, Хакасия, Башкортостан), а значениями являются коды регионов

 

согласно конституции РФ. При поиске кода региона учитываются субъекты

 

РФ со схожими названиями, например, Алтай и Алтайский край.

14

r e g i o n _ k e y = 0

 

 

15

t e m p _ r e g i o n =None

 

 

16

f o r key

i n

s o r t e d ( REGION_DICT . keys ( ) , r e v e r s e = True ) :

17

 

 

 

 

 

18

temp

=

key . r e p l a c e ( ’

’ , ’ ’ ) . l o w e r ( )

19

i f temp

i n region_name . r e p l a c e ( ’ ’ , ’ ’ ) . l o w e r ( ) :

20

 

i f not t e m p _ r e g i o n :

21

 

 

t e m p _ r e g i o n

=

temp

22

 

 

r e g i o n _ k e y

=

s t r ( REGION_DICT . g e t ( key ) )

23

 

e l i f l e n ( temp )

>

l e n ( t e m p _ r e g i o n ) :

38