String to sequence
mattia
gervaz at gmail.com
Sat Mar 14 07:23:28 EDT 2009
Il Sat, 14 Mar 2009 12:13:31 +0100, Peter Otten ha scritto:
> mattia wrote:
>
>> Il Sat, 14 Mar 2009 10:35:59 +0100, Peter Otten ha scritto:
>>
>>> mattia wrote:
>>>
>>>> How can I convert the following string:
>>>>
>>>> 'AAR','ABZ','AGA','AHO','ALC','LEI','AOC',
>>>> EGC','SXF','BZR','BIQ','BLL','BHX','BLQ'
>>>>
>>>> into this sequence:
>>>>
>>>> ['AAR','ABZ','AGA','AHO','ALC','LEI','AOC',
>>>> EGC','SXF','BZR','BIQ','BLL','BHX','BLQ']
>>>
>>>>>> s = "'AAR','ABZ','AGA','AHO','ALC','LEI','AOC'"
>>>>>> csv.reader(StringIO.StringIO(s), quotechar="'").next()
>>> ['AAR', 'ABZ', 'AGA', 'AHO', 'ALC', 'LEI', 'AOC']
>>>
>>> or
>>>
>>>>>> s = "'AAR','ABZ','AGA','AHO','ALC','LEI','AOC'" list(compile(s,
>>>>>> "nofile", "eval").co_consts[-1])
>>> ['AAR', 'ABZ', 'AGA', 'AHO', 'ALC', 'LEI', 'AOC']
>>>
>>> Peter
>>
>> Ok, and what about if the string is "['AAR', 'ABZ', 'AGA', 'AHO',
>> 'ALC']" I wanted to use eval(string) but it is discouraged, they say.
>
> If you use the csv module you can remove the [] manually
>
> assert s.startswith("[")
> assert s.endswith("]")
> s = s[1:-1]
>
> compile() will work without the enclosing list(...) call.
>
> Yet another one is
>
> flights = re.compile("'([A-Z]+)'").findall(s) if any(len(f) != 3 for f
> in flights):
> raise ValueError
>
> Peter
Yeah, I'll also havo he handle some simple cases, for now I just used
c2 = re.compile("a(?P<from>[A-Z]{3})=\[(?P<seqto>[^\]]+)\]")
from_to = dict((x.group("from"), str_to_seq(x.group("seqto"))) for x in
c2.finditer(rest))
Thanks a lot (I also didn't know of the any function)!
More information about the Python-list
mailing list