Нумерация повторяющихся кадастровых номеров
Имеется огромный список кадастровых номеров и координат участков, лежащих в 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...