Re: itertools.groupby

Discussion in 'Python' started by Ned Batchelder, Apr 20, 2013.

  1. On 4/20/2013 1:09 PM, Jason Friedman wrote:
    > I have a file such as:
    >
    > $ cat my_data
    > Starting a new group
    > a
    > b
    > c
    > Starting a new group
    > 1
    > 2
    > 3
    > 4
    > Starting a new group
    > X
    > Y
    > Z
    > Starting a new group
    >
    > I am wanting a list of lists:
    > ['a', 'b', 'c']
    > ['1', '2', '3', '4']
    > ['X', 'Y', 'Z']
    > []
    >
    > I wrote this:
    > ------------------------------------
    > #!/usr/bin/python3
    > from itertools import groupby
    >
    > def get_lines_from_file(file_name):
    > with open(file_name) as reader:
    > for line in reader.readlines():
    > yield(line.strip())
    >
    > counter = 0
    > def key_func(x):
    > if x.startswith("Starting a new group"):
    > global counter
    > counter += 1
    > return counter
    >
    > for key, group in groupby(get_lines_from_file("my_data"), key_func):
    > print(list(group)[1:])
    > ------------------------------------
    >
    > I get the output I desire, but I'm wondering if there is a solution
    > without the global counter.
    >
    >
    >


    def separate_on(lines, separator):
    group = None
    for line in lines:
    if line.strip() == separator:
    if group is not None:
    yield group
    group = []
    else:
    assert group is not None # Should have gotten a separator first
    group.append(line)
    yield group

    with open("my_data") as my_data:
    for group in separate_on(my_data, "Starting a new group"):
    print group


    The handling of the first separator line feels delicate to me, but this
    provides the output you want.

    --Ned.
    Ned Batchelder, Apr 20, 2013
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. G?nter Jantzen

    whatsnew 2.4 about itertools.groupby:

    G?nter Jantzen, Jun 9, 2004, in forum: Python
    Replies:
    0
    Views:
    278
    G?nter Jantzen
    Jun 9, 2004
  2. Replies:
    3
    Views:
    325
    Fredrik Lundh
    May 25, 2006
  3. 7stud

    itertools.groupby

    7stud, May 27, 2007, in forum: Python
    Replies:
    13
    Views:
    591
    =?ISO-8859-1?Q?BJ=F6rn_Lindqvist?=
    Jun 5, 2007
  4. Steve Howell

    Re: itertools.groupby

    Steve Howell, May 27, 2007, in forum: Python
    Replies:
    13
    Views:
    536
  5. Tobiah

    itertools.groupby

    Tobiah, Jan 15, 2008, in forum: Python
    Replies:
    2
    Views:
    299
    Tobiah
    Jan 16, 2008
Loading...

Share This Page