Chris Castillo wrote:
why does your 3rd and fourth lines have brackets?

On Thu, Jul 16, 2009 at 1:08 AM, Christian Witts <cwi...@compuscan.co.za <mailto:cwi...@compuscan.co.za>> wrote:

    Chris Castillo wrote:

        I'm having some trouble reading multiple data types from a
        single text file.

        say I had a file with names and numbers:

        bob
        100
        sue
        250
        jim
        300

        I have a few problems. I know how to convert the lines into an
        integer but I don't know how to iterate through all the lines
        and just get the integers and store them or iterate through
        the lines and just get the names and store them.

        please help.
        ------------------------------------------------------------------------

        _______________________________________________
        Tutor maillist  -  Tutor@python.org <mailto:Tutor@python.org>
        http://mail.python.org/mailman/listinfo/tutor
    You could do it with a list comprehension

    >>> names = []
    >>> numbers = []
    >>> [numbers.append(int(line.strip())) if line.strip().isdigit()
    else names.append(line.strip()) for line in open('test.txt','rb')
    if line.strip()]
    [None, None, None, None, None, None]
    >>> names, numbers
    (['bob', 'sue', 'jim'], [100, 250, 300])

    The list comprehension would unfold to

    for line in open('test.txt', 'rb'):
      if line.strip():
          if line.strip().isdigit():
              numbers.append(line.strip())
          else:
              names.append(line.strip())

    And from there you can do what you like with the lists.

-- Kind Regards,
    Christian Witts



>>> [numbers.append(int(line.strip())) if line.strip().isdigit() else names.append(line.strip()) for line in open('test.txt','rb') if line.strip()]
[None, None, None, None, None, None]

Are you referring to these lines ?
If so, the reason is that for Python to recognize it as a list comprehension it needs to be wrapped in square brackets, if you were to use () instead to wrap around it it would become a generator expression (something which is incredibly powerful for larger amounts of data as it iterates when it needs to instead of pre-building everything. And the following line with the Nones on is because that is the output of the calls to .append. Normally you wouldn't see it in your application though.

--
Kind Regards,
Christian Witts


_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to