code: def read_pattern(self, patterns, reverse=False,
                       terminate_on_match=False, postprocess=str):
          
          matches = regrep(self.filename, patterns, reverse=reverse,
                           terminate_on_match=terminate_on_match,
                           postprocess=postprocess)
          self.data.update(matches)
docs: General pattern reading. Uses monty's regrep method. Takes the same
          arguments.
  
          Args:
              patterns (dict): A dict of patterns, e.g.,
                  {"energy": r"energy\\(sigma->0\\)\\s+=\\s+([\\d\\-.]+)"}.
              reverse (bool): Read files in reverse. Defaults to false. Useful for
                  large files, esp OUTCARs, especially when used with
                  terminate_on_match.
              terminate_on_match (bool): Whether to terminate when there is at
                  least one match in each key in pattern.
              postprocess (callable): A post processing function to convert all
                  matches. Defaults to str, i.e., no change.
  
          Renders accessible:
              Any attribute in patterns. For example,
              {"energy": r"energy\\(sigma->0\\)\\s+=\\s+([\\d\\-.]+)"} will set the
              value of self.data["energy"] = [[-1234], [-3453], ...], to the
              results from regex and postprocess. Note that the returned
              values are lists of lists, because you can grep multiple
              items on one line.