string to list when the contents is a list
Steven D'Aprano
steven at REMOVE.THIS.cybersource.com.au
Wed Feb 17 19:47:20 EST 2010
On Thu, 18 Feb 2010 00:13:05 +0000, Rhodri James wrote:
> On Wed, 17 Feb 2010 23:48:38 -0000, Wes James <comptekki at gmail.com>
> wrote:
>
>> I have been trying to create a list form a string. The string will be
>> a list (this is the contents will look like a list). i.e. "[]" or
>> "['a','b']"
>
> If your string is trusted (i.e. goes nowhere near a user), just eval()
> it.
Or use something like YAML or JSON to parse it.
Fredrik Lundh has a simple_eval function which should be safe to use:
http://effbot.org/zone/simple-iterator-parser.htm
But it's fairly simple to parse a simple list like this. Here's a quick
and dirty version:
def string_to_list(s):
s = s.strip()
if not s.startswith('[') and s.endswith(']'):
raise ValueError
s = s[1:-1].strip()
items = [item.strip() for item in s.split(',')]
for i, item in enumerate(items):
items[i] = dequote(item)
return items
def dequote(s):
for delimiter in ('"""', "'''", '"', "'"):
if s.startswith(delimiter) and s.endswith(delimiter):
n = len(delimiter)
return s[n:-n]
raise ValueError
>>> s = "['a','b']"
>>> print s
['a','b']
>>> string_to_list(s)
['a', 'b']
>>> x = string_to_list(s)
>>> type(x)
<type 'list'>
>>> x
['a', 'b']
--
Steven
More information about the Python-list
mailing list