Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 7, 2012 15:28:06

Win95
От:
Зарегистрирован: 2011-11-04
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Прибавить числа

Доброго времени суток!
Есть файл в котором находится некий контент (содержимое 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'
подскажите, как прибавить к каждому числу нужное.



Офлайн

#2 Окт. 7, 2012 17:01:25

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Прибавить числа

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
извиняюсь за г.код. На смартфоне пишу)

Офлайн

#3 Окт. 7, 2012 17:10:40

Win95
От:
Зарегистрирован: 2011-11-04
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Прибавить числа

dimy44 Спасибо!)!)! Печенек, бесплатного вайфая и добра тебе!)



Офлайн

#4 Окт. 7, 2012 17:13:44

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Прибавить числа

dimy44
eval
Чем int не устраивает?

Офлайн

#5 Окт. 7, 2012 17:17:19

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Прибавить числа

Да, int конечно. Сначала написал, а потом подумал). Редактировать уже не стал.

Офлайн

#6 Окт. 7, 2012 17:18:13

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Прибавить числа

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)

Отредактировано reclosedev (Окт. 7, 2012 17:20:13)

Офлайн

#7 Окт. 7, 2012 17:21:19

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Прибавить числа

Ы

Офлайн

#8 Окт. 8, 2012 05:27:28

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Прибавить числа

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>'
>>>



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version