Как увеличить последний номер в файле python - PullRequest
1 голос
/ 24 июня 2019

У меня есть текст ниже в файле

firefox-x 46.0:
google 5.1.0.1:
    - request
    - branch

Мне нужно извлечь последнюю букву первой строки и увеличить на одну версию и добавить в тот же файл.Моя часть добавления будет

    firefox-x 46.1:
    google 5.1.0.1:
    - request
    - branch

, способной извлечь последнее целое число, но как обновить и записать в тот же файл.

import re
with open('branch.txt','r') as fh:
 first_line = fh.readline()
 #print (first_line)
 last_number = re.findall(".*(?:\D|^)(\d+)", first_line)
 for i in last_number:
    to_int = int(i)
 #print (to_int)
 next_num = (to_int +1)
 print (next_num)

1 Ответ

1 голос
/ 24 июня 2019

Вы можете использовать

import re
rx = r'\d+(?=:$)'
s="""firefox-x 46.0:
google 5.1.0.1:
    - request
    - branch"""

print(re.sub(rx, lambda x: str(int(x.group(0)) + 1), s, 1, re.M))

Выход:

firefox-x 46.1:
google 5.1.0.1:
    - request
    - branch

См. Демоверсию Python

Регулярное выражение \d+(?=:$) с флагом re.M будет соответствовать 1+ цифрам, за которыми следуют : в конце строки и 1, переданные как count аргумент re.sub будет выполнять только одну замену.

Часть lambda x: str(int(x.group(0)) + 1) примет первое совпадение, приведёт 1+ цифр к int, добавит 1 к значению и вернет его обратно к строке.

Для чтения и записи в другой файл:

import re

rx = r'\d+(?=:$)'
with open('branch.txt', 'r') as fr:
    data = fr.read()
    with open('branch.out.txt', 'w') as fw:
        fw.write(re.sub(rx , lambda x: str(int(x.group(0)) + 1), data, 1, re.M))
...