Нумерация повторяющихся кадастровых номеров

Имеется огромный список кадастровых номеров и координат участков, лежащих в txt файле следующего вида:

введите сюда описание изображения

Нужно пронумеровать дублирующиеся кадастровые номера по типу:

введите сюда описание изображения

61:07:0000000:3
1   682117,68   2317245,28
2   682113,39   2317252,03
3   682111,07   2317250,56
4   682115,35   2317243,80
S=22 кв.м.

61:07:0000000:3
1   682199,70   2317274,88
2   682201,96   2317275,52
3   682201,28   2317277,98
4   682199,01   2317277,34
S=6 кв.м.
61:07:0000000:6
1   682929,36   2313330,81
2   682931,70   2313330,81
3   682931,70   2313333,37
4   682929,36   2313333,37

Интересно как это можно реализовать.


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Читаем входной файл, регулярным выражением выделяем кадастровые номера, считаем их, из дублей делаем словарь, ещё раз читаем входной файл, копируем в выходной нумеруя строки из словаря:

import collections
import re
import sys

cadastral_re = re.compile(r'^\d+:\d+:\d+:\d+\s*$')

in_fname, out_fname = sys.argv[1:]

print('counting...')
with open(in_fname) as f_in:
    c = collections.Counter(filter(cadastral_re.match, f_in))
counters = {k: 0 for k, v in c.items() if v > 1}

print('processing...')
with open(in_fname) as f_in, open(out_fname, 'w') as f_out:
    for line in f_in:
        if line in counters:
            counters[line] += 1
            line = f'{line[:-1]}/{counters[line]}\n'
        f_out.write(line)

Использование:

$ python number.py in.txt out.txt
counting...
processing...
→ Ссылка