input record seperator (equivalent of "$|" of perl)

Fredrik Lundh fredrik at
Sun Dec 19 22:46:51 CET 2004

les_ander at wrote:

> I know that i can do readline() from a file object.
> However, how can I read till a specific seperator?
> for exmple,
> if my files are
> name
> profession
> id
> #
> name2
> profession3
> id2
> I would like to read this file as a record.
> I can do this in perl by defining a record seperator;
> is there an equivalent in python?

not really; you have to do it manually.

if the file isn't too large, consider reading all of it, and splitting on the

    for record in
        print record # process record

if you're using a line-oriented separator, like in your example, tools like
itertools.groupby can be quite handy:

    from itertools import groupby

    def is_separator(line):
         return line[:1] == "#"

    for sep, record in groupby(file, is_separator):
         if not sep:
              print list(record) # process record

or you could just spell things out:

    record = []
    for line in file:
         if line[0] == "#":
              if record:
               print record # process record
               record =  []
    if record:
        print record # process the last record, if any


More information about the Python-list mailing list