On 11/28/2011 12:47 PM, James Reynolds wrote:


On Mon, Nov 28, 2011 at 12:32 PM, Mayo Adams <mayoad...@gmail.com <mailto:mayoad...@gmail.com>> wrote:

    I am trying to pass a set of tuple strings from a file to a function I
    have defined.  Each tuple is on a separate line, and looks something
    like this:
     ('note',2048)


As already pointed out - this is a string (a representation of a tuple), not a tuple.

Your code must parse the string to extract the string representations of the values, then convert as needed to the desired Python values.

Tasks like this are not trivial.

Using eval as already noted is the easiest but not the best solution.

Perhaps we should back up and ask the overall objective of the program. Where did this file come from? Could we store the data in some other (easier to parse) manner?

If each line will always contain a string literal and an integer literal then the simplest encoding is:
note 2048

the program then is:

for line in file(path):
  val1, val2 = line.split)
  findindex(val1, int(val2))

Also see http://docs.python.org/library/json.html

    The function has two parameters , and is defined thus: def
    findindex(dval,ticks):
    Apparently, I need to cast the second value as an integer in the body
    of the function in order to work with it as such, but when I attempt
    int(ticks) I get
    ValueError: invalid literal for int() with base 10: '2048)'

    Upon searching for elucidation of this on the internet I find nothing
    but esoterica, at least as far as I am concerned.
    Any pointers would make me happy.

    --
    Mayo Adams



    mayoad...@gmail.com <mailto:mayoad...@gmail.com>
    _______________________________________________
    Tutor maillist  - Tutor@python.org <mailto:Tutor@python.org>
    To unsubscribe or change subscription options:
    http://mail.python.org/mailman/listinfo/tutor




Your problem is in the error message:

ValueError: invalid literal for int() with base 10: '2048)'

observer, Python tells you this isn't a number: '2048)'

Indeed, this is correct, because you '2048)' is not a number.

What you really want to pass to '2048', which int('2048')

can understand just fine.

So, trim off the parenthesis, or something.

Alternatively, since you aren't actually passing a "tuple" but something that looks like a python tuple as a string, you could eval it:

a = "('note',2048)"
b = eval(a)

print a, type(a), b, type(b)

>> ('note',2048) <type 'str'> ('note', 2048) <type 'tuple'>

In working with the second, you do normal tuple operations, like b[1] to access that index

When passing to a function, you do this: findindex(*b)


_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor


--
Bob Gailer
919-636-4239
Chapel Hill NC

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to