- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
def str_to_weight(val, format_str_max, format_str_min=None, separator=u",", long=3):
"""
%fgr (full gr) %cgr (cut gr) %kg
example
>>> str_to_weight('0.120', u'%kg%fgr kg', u'%kg%fgr kg', ',', 3)
u'0,120 kg'
>>> str_to_weight('0.120', u'%kg%fgr kg', u'%fgr gr', ',', 3)
u'120 gr'
>>> str_to_weight('0.120', u'%kg%fgr kg', u'%cgr gr', ',', 3)
u'12 gr'
"""
if isinstance(val, basestring):
try:
num = float(val.replace(',', '.'))
except ValueError:
return None
elif isinstance(val, float):
num = val
else:
return None
format_str = format_str_min if num < 1 and format_str_min else format_str_max
kg = u'%.f' % int(num)
fgr = re.sub(u'^\d+.', u'', (u'%.' + str(long) + u'f') % num)
if num < 1:
fgr = re.sub('^0+', '', fgr)
cgr = re.sub(u'0+$', u'', fgr)
if fgr and '%kg' in format_str:
fgr = separator + fgr
if cgr and '%kg' in format_str:
cgr = separator + cgr
return format_str.replace(u'%fgr', fgr).replace(u'%cgr', cgr).replace(u'%kg', kg)
def create_ru_weight_patterns(weight):
res = [
str_to_weight(weight, u'^%kg%cgr.?кг|%kg%cgr.?л', u'^%fgr.?г|%fgr.?мл', separator=u'[\.|,]'),
str_to_weight(weight, u'[ |\t|\n]%kg%cgr.?кг|%kg%cgr.?л', u'[ |\t|\n]%fgr.?г|%fgr.?мл', separator=u'[\.|,]'),
str_to_weight(weight, u'%kg%cgr.?кг|%kg%cgr.?л', u'%fgr.?г|%fgr.?мл', separator=u'[\.|,]'),
str_to_weight(weight, u'%kg%cgr.?кг|%kg%cgr.?л', separator=u'[\.|,]')
]
return filter(lambda x: x, res)
wvxvw 02.09.2014 17:22 # 0
kyzi007 02.09.2014 17:27 # 0
Уже понятно что пошел рагульный путь и там можно одной регуляркой обойтись.
wvxvw 02.09.2014 18:14 # 0
kyzi007 02.09.2014 19:21 # 0
Примерно в момент осознания что я что то навертела и запостила это.
tirinox 03.09.2014 06:16 # 0
kyzi007 03.09.2014 11:59 # 0
bormand 03.09.2014 12:39 # +1
tirinox 03.09.2014 12:52 # 0
kyzi007 03.09.2014 13:15 # 0
А вообще - это страница одного товара всегда.
Vindicar 04.09.2014 07:54 # 0
http://habrahabr.ru/post/146109/
>всегда
На каждое "всегда" есть своё "иногда".
kyzi007 04.09.2014 08:32 # 0
kegdan 03.09.2014 16:25 # −3
kyzi007 03.09.2014 16:53 # 0
bormand 03.09.2014 18:31 # +2