help converting some perl code to python

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • eight02645999@yahoo.com

    #1

    help converting some perl code to python

    hi
    i need help with converting a piece of perl code to python
    ......
    my $start = '\[start\]';
    my $file = '\[files\]';
    my $end = '\[end\]';
    .....

    while(<FILE>) #open a file
    {
    if ( /$start/ .. /$file/ ) { # if line match [start] till
    [files]
    do something with $_
    }
    if (/$file/ .. /$end/ )
    {
    do something with $_
    }
    }

    The file looks something like:

    [start]
    ....
    [files]
    ....
    [end]

    the problem is the '..' operator in perl. Is there any equivalent in
    python?
    any suggestions ?
    thanks

  • Sybren Stuvel

    #2
    Re: help converting some perl code to python

    eight02645999@y ahoo.com enlightened us with:[color=blue]
    > the problem is the '..' operator in perl. Is there any equivalent in
    > python? any suggestions ?[/color]

    I have a suggestion: stop assuming we know perl, and explain what this
    '..' operator does.

    Sybren
    --
    The problem with the world is stupidity. Not saying there should be a
    capital punishment for stupidity, but why don't we just take the
    safety labels off of everything and let the problem solve itself?
    Frank Zappa

    Comment

    • Ben Sizer

      #3
      Re: help converting some perl code to python

      eight02645999@y ahoo.com wrote:[color=blue]
      > the problem is the '..' operator in perl. Is there any equivalent in
      > python?[/color]

      I can't think of anything with a similar operation, to be honest. I'd
      try using while loops which look out for the next section delimiter.

      --
      Ben Sizer.

      Comment

      • Peter Otten

        #4
        Re: help converting some perl code to python

        eight02645999@y ahoo.com wrote:
        [color=blue]
        > i need help with converting a piece of perl code to python[/color]
        [color=blue]
        > the problem is the '..' operator in perl. Is there any equivalent in
        > python?[/color]

        Here is a class that emulates the .. operator:

        <code>
        import sys
        import re

        start, files, end = map(re.escape, ["[start]", "[files]", "[end]"])

        class Section(object) :
        def __init__(self, start, end):
        self.start = re.compile(star t).match
        self.end = re.compile(end) .match
        self.inside = False
        def __contains__(se lf, line):
        result = self.inside
        if result:
        if self.end(line):
        self.inside = False
        else:
        if self.start(line ):
        result = self.inside = True
        return result

        first = Section(start, files)
        second = Section(files, end)
        for line in sys.stdin:
        line = line[:-1]
        if line in first:
        # your code
        if line in second:
        # your code
        </code>

        However, the simpler

        <code>
        #untested
        import sys

        start, files, end = "[start]", "[files]", "[end]"
        keys = set([start, files, end])

        key = None
        for line in sys.stdin:
        line = line[:-1]
        if line in keys:
        key = line
        elif key == start:
        # your code
        elif key == files:
        # your code
        </code>

        might work even better because 'your code' doesn't get to see the sections'
        begin/end markers.

        Peter

        Comment

        • jgardner@jonathangardner.net

          #5
          Re: help converting some perl code to python

          The '..' operator is the flip-flop operator in perl. (It is rarely
          used.) It is exactly the same as the 'range' type operator. It returns
          false until the first condition is met, then it returns true until the
          last condition met, then it returns false.

          You could create a flip-flop with a python closure (t_cond and f_cond
          are functions that take a value and return True of False)

          def make_flip_flop( t_cond, f_cond):
          state = [False]
          def flip_flop(val):
          if state[0] and f_cond(val):
          state[0] = False
          elif not state[0] and t_cond(val):
          state[0] = True
          return state[0]
          return flip_flop

          Comment

          Working...