[Tutor] Converting from unicode to nonstring

Dave Angel davea at ieee.org
Fri Oct 15 14:51:15 CEST 2010


On 2:59 PM, David Hutto wrote:
> Ok, Let me restate and hopefully further clarify.
>
> 1. I have a field for a wxpython app using matplotlib to display
>
> 2. I have a sqlite3 db which I'm retrieving information from
>
> 3. The sqlitle data is returned as unicode: u'field'
>
> 4. The portion of the matplotlib code is filled in, in a for x in y:
>
> 5. in plot(self.plot), self.plot is the variable I'm using from the unicoded db
> field comes in from sqlite as u'[1,2,3,4]', which places a string in quotes in
> that variables place:
>
> plot(u'[1,2,3,4]')
>
> <snip>
Your point #5 shows that you still have the wrong handle on what a 
literal string is.

When you write in code
mystring = u"abc"

The u and the quote symbols are *not* in "the variables place".  The 
"variables place" contains a count, three characters, and some meta 
information.  The time you need the quotes are when you want to specify 
those three characters in your source code.  The time you get the quotes 
back is when you use repr(mystring) to display it.  If you use    print 
mystring   you don't see any quotes or 'u', nor do you when you call the 
function str(mystring).

So I'll try to explain some terminology.  When you run the source code

mystring = u"abc"

the interpreter (with help from the compiler) builds an object of type 
string, with contents of those three letters.  That object is bound to 
the name mystring.  Nowhere is a u or a quote to be found.


Now, the question is how to turn that string object into a list, since 
apparently plot() is looking for a list.  Judging from the error 
message, it may also be happy to take a float.  So it'd be good to find 
out just what types of objects it's willing to accept.

One of the first respondents on the thread showed how to convert this 
particular string into a list, but he made the implicit assumption that 
the values in the list were single-digit integer values.  I haven't seen 
you ever define what the possible values are.  But guessing that they 
are supposed to be a list containing a nonzero number of floats, 
separated by commas, you could do something like (untested):

     result = [float(strvalue) for strvalue in mystring.split(",")]

or, more straightforward:

       strvalues = mystring.split(",")      # get a list of strings, 
split by the comma
       result = []
       for  strvalue in strvalues:
              result.append(float(strvalue))         #convert to float

Notice, nothing about quotes, or unicode anywhere in the logic.

DaveA



More information about the Tutor mailing list