Форум сайта python.su
Подскажите пожалуйста. Есть текстовый файл в котором нужно найти нужные строки и заменить в них числовое знание. Например такое содержимое файла:
“”“
город Стамбул 12
город Стамбул 16
город Стамбул 41
”“”
и т.д.
Мне нужно написать код который будет увеличивать числа напротив слов “город Стамбул” ровно на 2. То есть вместо 12 должно стать 14, вместо 16 - 18, вместо 41 - 43. При этом цифры которые будут напротив Стамбула я не знаю заранее
Вот код который заменяет Стамбул 12 на Стамбул 14, но только если Стамбул 12 точно будет:
import re first = open("Stambul.txt").read() change = open("StambulNew.txt", "w") change.write(re.sub( "город Стамбул 12","город Стамбул 14", first)) change.close()
Отредактировано Karalov86 (Март 5, 2018 21:50:44)
Офлайн
Один из способов
import re change = open("StambulNew.txt", "a", encoding='utf-8') pat = re.compile("город Стамбул (\d+)") for first in open("Stambul.txt", encoding='utf-8').readlines(): res = str(int(re.search(pat, first).group(1))+2) change.write("город Стамбул {}\n".format(res)) change.close()
Офлайн
Один из способова как добиться такого же результата при том что текст не будет состоять из одного повторяющегося словосочетания “город Стамбул”
Отредактировано Karalov86 (Март 6, 2018 20:13:08)
Офлайн
import re change = open("StambulNew.txt", "w", encoding='utf-8') pat = re.compile(r"(?<=город Стамбул\s)(\d+)") for first in open("Stambul.txt", encoding='utf-8').readlines(): res = str(int(re.search(pat, first).group(1))+2) change.write(re.sub(pat, res, first)) change.close()
Офлайн
RomissevdПытаюсь подобный код провести для файла с текстом:
[code python]change = open("UPGRADENEW.txt", "w")
pat = re.compile(r"(?<=<HarmonyL>)(8)(</HarmonyL>\s)")
for first in open("UPGRADE.txt").readlines():
print(first)
res = str(int(re.search(pat, first).group(1))+2)
change.write(re.sub(pat, res, first))
change.close()[/code]
Отредактировано Karalov86 (Март 9, 2018 15:13:13)
Офлайн
Твоя регулярка ничего не находит в первой строке, а ты пытаешься вызвать у нее метод group()
import re change = open("UPGRADENEW.txt", "w") pat = re.compile(r"(?<=<HarmonyL>)(\d+)(?=</HarmonyL>\s)") for first in open("UPGRADE.txt").readlines(): print(first) res = re.search(pat, first) if res: res = str(int(res.group(1)) + 2) change.write(re.sub(pat, res, first)) change.close()
Офлайн