old_contents: #!/usr/bin/env python
  
  import sys, re, operator, collections
  
  #
  # Model
  #
  class WordFrequenciesModel:
      """ Models the data. In this case, we're only interested 
      in words and their frequencies as an end result """
      freqs = {}
      def __init__(self, path_to_file):
          stopwords = set(open('../stop_words.txt').read().split(','))
          words = re.findall('[a-z]{2,}', open(path_to_file).read().lower())
          self.freqs = collections.Counter(w for w in words if w not in stopwords)
  
  
  #
  # View
  #
  class WordFrequenciesView:
      def __init__(self, model):
          self._model = model
  
      def render(self):
          sorted_freqs = sorted(self._model.freqs.iteritems(), key=operator.itemgetter(1), reverse=True)
          for (w, c) in sorted_freqs[:25]:
              print w, '-', c
  
  #
  # Controller
  #
  class WordFrequencyController:
      def __init__(self, model, view):
          self._model = model
          self._view = view
          view.render()
  
  #
  # Main
  #
  m = WordFrequenciesModel(sys.argv[1])
  v = WordFrequenciesView(m)
  c = WordFrequencyController(m, v)
  
new_contents: #!/usr/bin/env python
  import sys, re, operator, collections
  
  class WordFrequenciesModel:
      """ Models the data. In this case, we're only interested 
      in words and their frequencies as an end result """
      freqs = {}
      def __init__(self, path_to_file):
          self.update(path_to_file)
  
      def update(self, path_to_file):
          try:
              stopwords = set(open('../stop_words.txt').read().split(','))
              words = re.findall('[a-z]{2,}', open(path_to_file).read().lower())
              self.freqs = collections.Counter(w for w in words if w not in stopwords)
          except IOError:
              print "File not found"
              self.freqs = {}
  class WordFrequenciesView:
      def __init__(self, model):
          self._model = model
  
      def render(self):
          sorted_freqs = sorted(self._model.freqs.iteritems(), key=operator.itemgetter(1), reverse=True)
          for (w, c) in sorted_freqs[:25]:
              print w, '-', c
  
  class WordFrequencyController:
      def __init__(self, model, view):
          self._model, self._view = model, view
          view.render()
  
      def run(self):
          while True:
              print "Next file: " 
              sys.stdout.flush() 
              filename = sys.stdin.readline().strip()
              self._model.update(filename)
              self._view.render()
  
  
  m = WordFrequenciesModel(sys.argv[1])
  v = WordFrequenciesView(m)
  c = WordFrequencyController(m, v)
  c.run()
  
subject: Make the mvc example interactive