Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 23, 2012 17:31:11

fr0st84
Зарегистрирован: 2012-09-04
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Как разбить строку на части в которых может быть разделитель?

Всем привет

такая задачка, нужно разбить такую строчку по разделителю ‘,’
проблема в том, что зн-нием разделенным ‘,’ может быть регулярка в “” включающая разделитель - ‘,’

str = 'reserved-memory,NO,NO,NO,,NO,"^({1,20})$",,,,,,,cache-policy=^(RESIDENT|NO_MIGRATION)$,,,'

>>> s.split(',')
['reserved-memory', ‘NO’, ‘NO’, ‘NO’, ‘', ’NO', '"^({1', ‘20})$“’, ‘', ’', ‘', ’', ‘', ’', ‘cache-policy=^(RESIDENT|NO_MIGRATION)$’, ‘', ’', '']

такой список - это то что мне нужно, только я хочу чтобы регулярка в ”" была 1 элементом списка.

вот так
['reserved-memory', ‘NO’, ‘NO’, ‘NO’, ‘', ’NO', '"^({1, 20})$"', ‘', ’', ‘', ’', ‘', ’', ‘cache-policy=^(RESIDENT|NO_MIGRATION)$’, ‘', ’', '']

какие есть идеи?

Спасибо )

Отредактировано fr0st84 (Ноя. 23, 2012 17:34:31)

Офлайн

#2 Ноя. 23, 2012 18:35:51

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Как разбить строку на части в которых может быть разделитель?

s = 'reserved-memory,NO,NO,NO,,NO,"^({1,20})$",,,,,,,cache-policy=^(RESIDENT|NO_MIGRATION)$,,,'
def comma_split(s):
    if s.count(',') > 1:
        return s.split(',')
    return s
def reduce_flat(a, b):
    if isinstance(b, list):
        a = a +  b
    else:
        a.append(b)
    return a
print reduce(reduce_flat, map(comma_split, s.split('"')), [])
Результат:
['reserved-memory', 'NO', 'NO', 'NO', '', 'NO', '', '^({1,20})$', '', '', '', '', '', '', '', 'cache-policy=^(RESIDENT|NO_MIGRATION)$', '', '', '']

Отредактировано s0rg (Ноя. 23, 2012 18:37:46)

Офлайн

#3 Ноя. 26, 2012 02:18:40

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

Как разбить строку на части в которых может быть разделитель?

>>> import io
>>> import csv
>>> 
>>> s = 'reserved-memory,NO,NO,NO,,NO,"^({1,20})$",,,,,,,cache-policy=^(RESIDENT|NO_MIGRATION)$,,,'
>>> 
>>> with io.StringIO(s) as sin:
...     lst = next(csv.reader(sin), [])
... 
>>> print(lst)
['reserved-memory', 'NO', 'NO', 'NO', '', 'NO', '^({1,20})$', '', '', '', '', '', '', 'cache-policy=^(RESIDENT|NO_MIGRATION)$', '', '', '']
>>>



Офлайн

#4 Ноя. 26, 2012 17:04:09

fr0st84
Зарегистрирован: 2012-09-04
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Как разбить строку на части в которых может быть разделитель?

Спасибо всем за ответы

>to s0rg
Ваш код не будет работать в случае если неск-ко ‘,’ присутствует в регулярке - “^({1,20}),,$”
>to py.user.next
спасибо, csv это то что нужно

я написал так:
Python 2.7.3 (default, Apr 14 2012, 08:58:41) on linux2
Type “help”, “copyright”, “credits” or “license” for more information.

>>> import csv
>>> s = 'reserved-memory,NO,NO,NO,,NO,"^({1,20}),,$",,,,,,,cache-policy=^(RESIDENT|NO_MIGRATION)$,,,'
>>> csv.reader([s]).next()
['reserved-memory', 'NO', 'NO', 'NO', '', 'NO', '^({1,20}),,$', '', '', '', '', '', '', 'cache-policy=^(RESIDENT|NO_MIGRATION)$', '', '', '']

Отредактировано fr0st84 (Ноя. 26, 2012 17:08:04)

Офлайн

#5 Ноя. 27, 2012 02:36:19

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

Как разбить строку на части в которых может быть разделитель?

да, что-то я не догадался сразу

>>> s = 'reserved-memory,NO,NO,NO,,NO,"^({1,20})$",,,,,,,cache-policy=^(RESIDENT|NO_MIGRATION)$,,,'
>>> lst = next(csv.reader([s]), [])
>>> lst
['reserved-memory', 'NO', 'NO', 'NO', '', 'NO', '^({1,20})$', '', '', '', '', '', '', 'cache-policy=^(RESIDENT|NO_MIGRATION)$', '', '', '']
>>>
.next() в втретьем питоне нет



Офлайн

#6 Ноя. 27, 2012 11:54:04

fr0st84
Зарегистрирован: 2012-09-04
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Как разбить строку на части в которых может быть разделитель?

У нас используется питон 2.х, но я учту Ваше замечание.
Спасибо

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version