Найти - Пользователи
Полная версия: Прибавить числа
Начало » Python для новичков » Прибавить числа
1
Win95
Доброго времени суток!
Есть файл в котором находится некий контент (содержимое html страницы) мне необходимо заменить все 5 значные цифры на их же +300 (т.е 28501 => 28801). Числа находятся в тегах <tr>…</tr>. Я пробовал замену с помощью регулярных выражений, но не получилось. По этому решил выдрать все эти числа из файла, увеличить их, а затем создав из исходного документа список заменить его на новый - отредактированный. вот написал код:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import re
data= open('text 2.txt').read()
f = open("text1.txt","w")
k="<td>\d\d\d\d\d</td>"
found=re.findall(k, data)
found=str(found)
found=found.translate(None, "td<'>/][,")
f.write(found)
f.close()
print found
print 'end'
подскажите, как прибавить к каждому числу нужное.
dimy44
txt = """
abc<tr>12345</tr>mag
dmg<tr>67890</tr>amj
"""
import re
pattern = re.compile(r'(<tr>\d{5}</tr>)')
lst = pattern.split(txt)
def edit(t):
    if pattern.match(t):
        return '<tr>%d</tr>' % (eval(t[4:-5])+300)
    else:
        return t
txt = ''.join([edit(t) for t in lst])
print txt
извиняюсь за г.код. На смартфоне пишу)
Win95
dimy44 Спасибо!)!)! Печенек, бесплатного вайфая и добра тебе!)
odnochlen
dimy44
eval
Чем int не устраивает?
dimy44
Да, int конечно. Сначала написал, а потом подумал). Редактировать уже не стал.
reclosedev
re.sub в качестве replacement может принимать функцию, которая получает матч и возвращает замену:
import re
 
def add_300(m):
    return str(int(m.group(1)) + 300)
 
text = "<td>10000</td><tr>20000</td><td>12345</td>"
result = re.sub('<td>(\d{5})</td>', add_300, text)
odnochlen
Ы
py.user.next
reclosedev не проверил код перед отправкой

>>> import re
>>> 
>>> text = "<td>10000</td><tr>20000</td><td>12345</td>"
>>> 
>>> re.sub(r'(<td>)(\d{5})(</td>)',
...        lambda mo: '{}{}{}'.format(
...            mo.group(1),
...            int(mo.group(2)) + 300,
...            mo.group(3)
...        ),
...        text)
'<td>10300</td><tr>20000</td><td>12645</td>'
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB