code: def from_file(cls, filename):
          
          filename = str(filename)
          from pymatgen.io.gaussian import GaussianOutput
          with zopen(filename) as f:
              contents = f.read()
          fname = filename.lower()
          if fnmatch(fname, "*.xyz*"):
              return cls.from_str(contents, fmt="xyz")
          elif any([fnmatch(fname.lower(), "*.{}*".format(r))
                    for r in ["gjf", "g03", "g09", "com", "inp"]]):
              return cls.from_str(contents, fmt="g09")
          elif any([fnmatch(fname.lower(), "*.{}*".format(r))
                    for r in ["out", "lis", "log"]]):
              return GaussianOutput(filename).final_structure
          elif fnmatch(fname, "*.json*") or fnmatch(fname, "*.mson*"):
              return cls.from_str(contents, fmt="json")
          elif fnmatch(fname, "*.yaml*"):
              return cls.from_str(contents, fmt="yaml")
          else:
              from pymatgen.io.babel import BabelMolAdaptor
              m = re.search(r"\.(pdb|mol|mdl|sdf|sd|ml2|sy2|mol2|cml|mrv)",
                            filename.lower())
              if m:
                  new = BabelMolAdaptor.from_file(filename,
                                                  m.group(1)).pymatgen_mol
                  new.__class__ = cls
                  return new
  
          raise ValueError("Unrecognized file extension!")
docs: Reads a molecule from a file. Supported formats include xyz,
          gaussian input (gjf|g03|g09|com|inp), Gaussian output (.out|and
          pymatgen's JSON serialized molecules. Using openbabel,
          many more extensions are supported but requires openbabel to be
          installed.
  
          Args:
              filename (str): The filename to read from.
  
          Returns:
              Molecule