title: What is the Pythonic way to implement a simple FSM?
body: <p>Yesterday I had to parse a very simple binary data file - the rule is, look for two bytes in a row that are both 0xAA, then the next byte will be a length byte, then skip 9 bytes and output the given amount of data from there. Repeat to the end of the file.</p>
  
  <p>My solution did work, and was very quick to put together (even though I am a C programmer at heart, I still think it was quicker for me to write this in Python than it would have been in C) - BUT, it is clearly not at all Pythonic and it reads like a C program (and not a very good one at that!)</p>
  
  <p>What would be a better / more Pythonic approach to this? Is a simple FSM like this even still the right choice in Python?</p>
  
  <p>My solution:</p>
  
  <pre><code>#! /usr/bin/python
  
  import sys
  
  f = open(sys.argv[1], "rb")
  
  state = 0
  
  if f:
      for byte in f.read():
          a = ord(byte)       
          if state == 0:
              if a == 0xAA:
                  state = 1
          elif state == 1:
              if a  == 0xAA:
                  state = 2
              else: 
                  state = 0
          elif state == 2:
              count = a;
              skip = 9
              state = 3
          elif state == 3:
              skip = skip -1
              if skip == 0:
                  state = 4
          elif state == 4:
               print "%02x" %a
               count = count -1 
               if count == 0:
                   state = 0
                   print "\r\n"
  </code></pre>