code: def from_ddy_file(cls, file_path):
          
          # check that the file is there
          if not os.path.isfile(file_path):
              raise ValueError(
                  'Cannot find a .ddy file at {}'.format(file_path))
          if not file_path.lower().endswith('.ddy'):
              raise ValueError(
                  'DDY file does not have a .ddy extension.')
  
          # check the python version and open the file
          try:
              iron_python = True if platform.python_implementation() == 'IronPython' \
                  else False
          except Exception:
              iron_python = True
  
          if iron_python:
              ddywin = codecs.open(file_path, 'r')
          else:
              ddywin = codecs.open(file_path, 'r', encoding='utf-8', errors='ignore')
  
          try:
              ddytxt = ddywin.read()
              location_format = re.compile(
                  r"(Site:Location,(.|\n)*?((;\s*!)|(;\s*\n)|(;\n)))")
              design_day_format = re.compile(
                  r"(SizingPeriod:DesignDay,(.|\n)*?((;\s*!)|(;\s*\n)|(;\n)))")
              location_matches = location_format.findall(ddytxt)
              des_day_matches = design_day_format.findall(ddytxt)
          except Exception as e:
              import traceback
              raise Exception('{}\n{}'.format(e, traceback.format_exc()))
          else:
              # check to be sure location was found
              assert len(location_matches) > 0, 'No location objects found ' \
                  'in .ddy file.'
  
              # build design day and location objects
              location = Location.from_location(location_matches[0][0])
              design_days = [DesignDay.from_ep_string(
                  match[0], location) for match in des_day_matches]
          finally:
              ddywin.close()
  
          cls_ = cls(location, design_days)
          cls_._file_path = os.path.normpath(file_path)
          return cls_
docs: Initalize from a ddy file object from an existing ddy file.
  
          args:
              file_path: A string representing a complete path to the .ddy file.