Re: Is there a simple way to parse this string ?

2007-12-22 Thread [EMAIL PROTECTED]
Steven D'Aprano,

On Dec 21, 2:08 am, Steven D'Aprano
[EMAIL PROTECTED] wrote:
 On Thu, 20 Dec 2007 20:27:23 -0800, [EMAIL PROTECTED] wrote:
  Stef,

  For clarification, there is nothing hazardous about using eval on the
  string that you presented.

  t = eval('(0, 0, 0, 255), (192, 192, 192, 255), True, 8')

  Whether or not this is the simplest solution, remains a question.

 For clarification, if all the poster wanted was to convert the *specific*
 *known* string to a tuple, he would be better off just writing it as a
 tuple:

Steven,

No, that's not what he asked.  Read the original question.


 t = (0, 0, 0, 255), (192, 192, 192, 255), True, 8

 is much faster than calling eval().

 But obviously that's not what the Original Poster wants to do.

There's nothing Obviously Implied about what the author wants to do
here, besides convert an innocent string object to a tuple.

 The tuple
 give was indicative of input that comes from somewhere

Really? I personally can't tell that from his provided example.
There's definitely not enough info on this one.

 -- perhaps a
 config file, perhaps a web form, perhaps a command line argument, who
 knows? The point is, if the string comes from a user, then it could
 contain anything:

 '(0, 0, 0, 255), (192, 192, 192, 255), True, 8'
 '1000, 10001, 12, 104'
 'foo bar baz.split()'
 '[i for i in range(10)]'
 '[19852.7412]*10**2'
 '__import__(os).system(ls -r *)'

 Just because the OP's specific example is safe doesn't make eval() safe.

Agreed.  And after the last couple comments, he was probably made
aware of that.  Thank you for reiterating :-)


 --
 Steven
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Is there a simple way to parse this string ?

2007-12-22 Thread Steven D'Aprano
On Sat, 22 Dec 2007 07:21:26 -0800, [EMAIL PROTECTED] wrote:

 Steven D'Aprano,
 
 On Dec 21, 2:08 am, Steven D'Aprano
 [EMAIL PROTECTED] wrote:
 On Thu, 20 Dec 2007 20:27:23 -0800, [EMAIL PROTECTED] wrote:
  Stef,

  For clarification, there is nothing hazardous about using eval on the
  string that you presented.

  t = eval('(0, 0, 0, 255), (192, 192, 192, 255), True, 8')

  Whether or not this is the simplest solution, remains a question.

 For clarification, if all the poster wanted was to convert the
 *specific* *known* string to a tuple, he would be better off just
 writing it as a tuple:
 
 Steven,
 
 No, that's not what he asked.  Read the original question.

I did. I even read all the way down to the part where he wrote:

(Not needed now, but might need it in the future: even deeper nested 
lists, represented by a string.)

Its clear that the OP has more in mind than just a single specific known 
string.



-- 
Steven
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Is there a simple way to parse this string ?

2007-12-20 Thread George Sakkis
On Dec 19, 8:44 pm, Paul McGuire [EMAIL PROTECTED] wrote:

 I think the last thread of this nature also cited a similar tool by
 the effbot, which he describes 
 here:http://www.effbot.org/zone/simple-iterator-parser.htm.
 This parser is about 10X faster than the equivalent pyparsing parser.

Here's the relevant thread: http://preview.tinyurl.com/2aeswn. Note
that the builtin eval() is around 5x faster than this parser, and from
the statement above, 50x faster than the pyparsing solution.

George
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Is there a simple way to parse this string ?

2007-12-20 Thread [EMAIL PROTECTED]
Stef,

For clarification, there is nothing hazardous about using eval on the
string that you presented.

t = eval('(0, 0, 0, 255), (192, 192, 192, 255), True, 8')

Whether or not this is the simplest solution, remains a question.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Is there a simple way to parse this string ?

2007-12-20 Thread Steven D'Aprano
On Thu, 20 Dec 2007 20:27:23 -0800, [EMAIL PROTECTED] wrote:

 Stef,
 
 For clarification, there is nothing hazardous about using eval on the
 string that you presented.
 
 t = eval('(0, 0, 0, 255), (192, 192, 192, 255), True, 8')
 
 Whether or not this is the simplest solution, remains a question.


For clarification, if all the poster wanted was to convert the *specific* 
*known* string to a tuple, he would be better off just writing it as a 
tuple:

t = (0, 0, 0, 255), (192, 192, 192, 255), True, 8

is much faster than calling eval().

But obviously that's not what the Original Poster wants to do. The tuple 
give was indicative of input that comes from somewhere -- perhaps a 
config file, perhaps a web form, perhaps a command line argument, who 
knows? The point is, if the string comes from a user, then it could 
contain anything:

'(0, 0, 0, 255), (192, 192, 192, 255), True, 8'
'1000, 10001, 12, 104'
'foo bar baz.split()'
'[i for i in range(10)]'
'[19852.7412]*10**2'
'__import__(os).system(ls -r *)'


Just because the OP's specific example is safe doesn't make eval() safe.


-- 
Steven
-- 
http://mail.python.org/mailman/listinfo/python-list


RE: Is there a simple way to parse this string ?

2007-12-19 Thread James Newton
I need to translate the following string
a = '(0, 0, 0, 255), (192, 192, 192, 255), True, 8'

into the following list or tuple
b = [(0, 0, 0, 255), (192, 192, 192, 255), True, 8 ]

Is there a simple way to to this.
Stef Mientki


 a = '(0, 0, 0, 255), (192, 192, 192, 255), True, 8'
 b = eval(a)
 b
((0, 0, 0, 255), (192, 192, 192, 255), True, 8)
 c = list(eval(a))
 c
[(0, 0, 0, 255), (192, 192, 192, 255), True, 8]
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Is there a simple way to parse this string ?

2007-12-19 Thread [EMAIL PROTECTED]
Stef,

You can quickly get a tuple via:

t = eval('(0, 0, 0, 255), (192, 192, 192, 255), True, 8')

Joseph Armbruster

On Dec 19, 4:17 pm, Stef Mientki [EMAIL PROTECTED] wrote:
 hello,

 I need to translate the following string
 a = '(0, 0, 0, 255), (192, 192, 192, 255), True, 8'

 into the following list or tuple
 b = [(0, 0, 0, 255), (192, 192, 192, 255), True, 8 ]

 Is there a simple way to to this.
 (Not needed now, but might need it in the future: even deeper nested
 lists, represented by a string.)

 thanks,
 Stef Mientki

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Is there a simple way to parse this string ?

2007-12-19 Thread Larry Bates
Stef Mientki wrote:
 hello,
 
 I need to translate the following string
a = '(0, 0, 0, 255), (192, 192, 192, 255), True, 8'
 
 into the following list or tuple
b = [(0, 0, 0, 255), (192, 192, 192, 255), True, 8 ]
 
 Is there a simple way to to this.
 (Not needed now, but might need it in the future: even deeper nested 
 lists, represented by a string.)
 
 thanks,
 Stef Mientki

There are threads on this list about eval and how you need to be careful.
Make sure you know where the string is coming from and can control the
contents.  If you read if from a user they could type in:

os.system('rm -rf *') or os.system('del *.*')

eval that and it deletes all the files on your disk

-Larry
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Is there a simple way to parse this string ?

2007-12-19 Thread John Machin
On Dec 20, 9:10 am, Larry Bates [EMAIL PROTECTED] wrote:
 Stef Mientki wrote:
  hello,

  I need to translate the following string
 a = '(0, 0, 0, 255), (192, 192, 192, 255), True, 8'

  into the following list or tuple
 b = [(0, 0, 0, 255), (192, 192, 192, 255), True, 8 ]

  Is there a simple way to to this.
  (Not needed now, but might need it in the future: even deeper nested
  lists, represented by a string.)

  thanks,
  Stef Mientki

 There are threads on this list about eval and how you need to be careful.

In particular Paul Maguire recently pointed to a safe evaluator that
was restricted (IIRC) to something like lists/dicts/etc of ints/floats/
string/etc constants -- looks like just what you need.

 Make sure you know where the string is coming from and can control the
 contents.  If you read if from a user they could type in:

 os.system('rm -rf *') or os.system('del *.*')

 eval that and it deletes all the files on your disk


Does anyone know of a newsreader that can automatically killfile
people who suggest eval without any warnings at all? Or should we let
Darwinian selection take its effect?
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Is there a simple way to parse this string ?

2007-12-19 Thread Gabriel Genellina
En Wed, 19 Dec 2007 19:23:36 -0300, John Machin [EMAIL PROTECTED]  
escribió:

 On Dec 20, 9:10 am, Larry Bates [EMAIL PROTECTED] wrote:
 Stef Mientki wrote:

  I need to translate the following string
 a = '(0, 0, 0, 255), (192, 192, 192, 255), True, 8'

  into the following list or tuple
 b = [(0, 0, 0, 255), (192, 192, 192, 255), True, 8 ]

  Is there a simple way to to this.

 In particular Paul Maguire recently pointed to a safe evaluator that
 was restricted (IIRC) to something like lists/dicts/etc of ints/floats/
 string/etc constants -- looks like just what you need.

There is also a Cookbook recipe for a safe_eval function at  
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/364469

 Does anyone know of a newsreader that can automatically killfile
 people who suggest eval without any warnings at all? Or should we let
 Darwinian selection take its effect?

Doesn't work, Darwininan selection would act on the unfortunate people  
asking, not on who careless answers use eval :(

-- 
Gabriel Genellina

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Is there a simple way to parse this string ?

2007-12-19 Thread Paul McGuire
On Dec 19, 4:23 pm, John Machin [EMAIL PROTECTED] wrote:
 On Dec 20, 9:10 am, Larry Bates [EMAIL PROTECTED] wrote:





  Stef Mientki wrote:
   hello,

   I need to translate the following string
  a = '(0, 0, 0, 255), (192, 192, 192, 255), True, 8'

   into the following list or tuple
  b = [(0, 0, 0, 255), (192, 192, 192, 255), True, 8 ]

   Is there a simple way to to this.
   (Not needed now, but might need it in the future: even deeper nested
   lists, represented by a string.)

   thanks,
   Stef Mientki

  There are threads on this list about eval and how you need to be careful.

 In particular Paul Maguire recently pointed to a safe evaluator that
 was restricted (IIRC) to something like lists/dicts/etc of ints/floats/
 string/etc constants -- looks like just what you need.


I think the last thread of this nature also cited a similar tool by
the effbot, which he describes here: 
http://www.effbot.org/zone/simple-iterator-parser.htm.
This parser is about 10X faster than the equivalent pyparsing parser.

-- Paul (McGuire)
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Is there a simple way to parse this string ?

2007-12-19 Thread Paul McGuire
On Dec 19, 4:23 pm, John Machin [EMAIL PROTECTED] wrote:
 On Dec 20, 9:10 am, Larry Bates [EMAIL PROTECTED] wrote:

 In particular Paul Maguire recently pointed to a safe evaluator that
 was restricted (IIRC) to something like lists/dicts/etc of ints/floats/
 string/etc constants -- looks like just what you need.


The pyparsing parser can be viewed at
http://pyparsing.wikispaces.com/space/showimage/parsePythonValue.py.

-- Paul
-- 
http://mail.python.org/mailman/listinfo/python-list