Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 30, 2018 00:52:48

polin11
Зарегистрирован: 2013-05-02
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг кодов ОКТМО

Есть справочник ОКТМО, можно взять http://www.gks.ru/metod/oktmo.html
Справочник имеет иерархическую структуру. На вход получаю последовательно строки, для каждой строки родитель записи был получен ранее:
37 000 000 Муниципальные образования Курганской области
37 600 000 Муниципальные районы Курганской области/
37 602 000 Альменевский муниципальный район
37 602 400 Сельские поселения Альменевского муниципального района/
37 602 442 - Шариповский сельсовет


Нужно для каждой записи найти родителя по иерархии, для каждой записи родитель идет раньше, чем сама запись, например
37 000 000 корень
37 600 000 родитель 37 000 000
37 602 000 родитель 37 600 000
37 602 400 родитель 37 602 000
37 602 442 родитель 37 602 400
Была идея у кода справа заменять по очереди цифры нулями и искать из списка ранее полученных записей совпадение с родителем, как-то так

 def f(code)
	index = len(code.rstrip('0')) - 1
	parent = ''
	while index > 0:
		code_new = code[:index].ljust(8, '0')
		# records_list - список из ранее полученных кодов в которых точно есть родитель
		if code_new in records_list:
			parent = code_new
			break
		index -= 1
	return parent
Но эта логика не работает, так например у кода 71 871 000 родитель 71 850 000.
71 850 000 Городские округа Ханты-Мансийского автономного округа - Югры/
71 871 000 - город Ханты-Мансийск

В приказе который утверждает ОКТМО, сказано
Формула структуры кода ОКТМО в первом разделе:
ХХ ХХХ ХХХ,
где: 1, 2 знаки идентифицируют объекты классификации первой ступени классификации;
3 – 5 знаки идентифицируют объекты классификации второй ступени классификации;
6 – 8 знаки идентифицируют объекты классификации третьей ступени классификации;
На первой ступени классификации используется порядковый метод кодирования объектов классификации.
На второй и третьей ступенях классификации применяется последовательный метод
кодирования объектов классификации. При этом разряды 3 и 6 отведены под признаки
соответственно Р1 и Р2, указывающие ступень классификации и вид кодируемого объекта.
В этом случае применяется параллельный метод кодирования.

Что за последовательный и параллельный метод кодирования объектов классификации???
Может кто-то сталкивался с такой проблемой и подскажет как распарсить такой массив информации(получить родителя)?

Офлайн

#2 Ноя. 30, 2018 14:36:42

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2742
Репутация: +  183  -
Профиль   Отправить e-mail  

Парсинг кодов ОКТМО

> Что за последовательный и параллельный метод кодирования объектов классификации???

https://life-prog.ru/1_21723_metodi-kodirovaniya.html

> Может кто-то сталкивался с такой проблемой и подскажет как распарсить такой массив информации(получить родителя)?

А собственно какой родитель тебе нужен?

 # Получаем код первого родителя
>>> 37602442 - 37602442 % 1000000
37000000
# Получаем код второго родителя
>>> 37602442 - 37602442 % 100000
37600000
# Получаем код третьего родителя
>>> 37602442 - 37602442 % 1000
37602000



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Ноя. 30, 2018 14:55:00)

Офлайн

#3 Ноя. 30, 2018 17:22:58

polin11
Зарегистрирован: 2013-05-02
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг кодов ОКТМО

Rodegast
А собственно какой родитель тебе нужен?
Мне нужен родитель на 1 уровень выше по иерархии, чем анализируемая запись.
Я думал схоже, к сожалению ни моя ни ваша логика не работает,
для 71871000 родителем является 71 850 000
для 71 850 000 родителем является 71800000
для 71800000 нет родителя, код в корне справочника

Офлайн

#4 Ноя. 30, 2018 17:52:01

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2742
Репутация: +  183  -
Профиль   Отправить e-mail  

Парсинг кодов ОКТМО

Тогда получаешь родителя третьего уровня, если значение не поменялось, то второго и т.д.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Ноя. 30, 2018 18:28:45

polin11
Зарегистрирован: 2013-05-02
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг кодов ОКТМО

Rodegast
Тогда получаешь родителя третьего уровня, если значение не поменялось, то второго и т.д.
Для кода 71871000 родитель, которого мне надо получить, 71 850 000. Каким образом, исходя из Вашей логики, я могу это сделать?

Офлайн

#6 Ноя. 30, 2018 19:45:29

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2742
Репутация: +  183  -
Профиль   Отправить e-mail  

Парсинг кодов ОКТМО

> Для кода 71871000 родитель, которого мне надо получить, 71 850 000

С чего ты взял что у 71871000 родитель 71850000? Первый раздел ОКТМО предусматривает только 3 уровня классификации, и оба этих объекта находятся на втором уровне.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Ноя. 30, 2018 19:45:50)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version