Страницы

Поиск по вопросам

среда, 22 января 2020 г.

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

#python_3x


Всем привет!
Только начал разбираться в разработке на python и попалась интересная и в то же время
сложная задача для меня, которую я не могу решить.

Вот сама задача:
имеется текстовый документ, который состоит из пунктов, которые могут содержать сколько
угодно подпунктов (пример - 1.1. абв; 1.2. вба; 2.4. жзи). Из этого документа могут
удаляться любые пункты. Пример:

1.1. Пункт первый, текст.
1.2. Пункт второй, который будет полностью удален.
1.3. Пункт третий, текст.


При таком наивном удалении нумерация нарушится: 

1.1. Пункт первый, текст.
1.3. Пункт третий, текст.


и пункт 1.3 будет следовать за пунктом 1.1.
А нужно, чтобы она не нарушалась. Т.е. после удаления пункта 1.2 пункт 1.3 должен
переименоваться в '1.2. Пункт третий, текст' и текст должен выглядеть так

1.1. Пункт первый, текст.
1.2. Пункт третий, текст.


Используется Python 3.6
    


Ответы

Ответ 1



Можно с помощью регулярных выражений исправить нумерацию: import re def make_replace(index): def replace(m): nonlocal index s = m.group(1) + str(index) index += 1 return s return replace replace = make_replace(index=2) for line in file: print(re.sub(r'(^1\.)\d+', replace, line), end='') Полный пример. См. Как заменить строчку в .txt файле через python 3? Можно упростить replace() функцию, используя itertools.count(): replace = lambda m, i=itertools.count(index): m.group(1)+str(next(i)) Пример.

Комментариев нет:

Отправить комментарий