docs: def _import_data(self):
          """Import data from a stat file.
          """
          # set default state to ironpython for very old ironpython (2.7.0)
          iron_python = True
          try:
              iron_python = True if platform.python_implementation() == 'IronPython' \
                  else False
          except ValueError as e:
              # older versions of IronPython fail to parse version correctly
              # failed to parse IronPython sys.version: '2.7.5 (IronPython 2.7.5 (2.7.5.0)
              # on .NET 4.0.30319.42000 (64-bit))'
              if 'IronPython' in str(e):
                  iron_python = True
  
          if iron_python:
              statwin = codecs.open(self.file_path, 'r')
          else:
              statwin = codecs.open(self.file_path, 'r', encoding='utf-8', errors='ignore')
          try:
              line = statwin.readline()
              # import header with location
              self._header = [line] + [statwin.readline() for i in xrange(9)]
              self._body = statwin.read()
          except Exception as e:
              import traceback
              raise Exception('{}\n{}'.format(e, traceback.format_exc()))
          else:
  
              # import location data
              loc_name = self._header[2].strip().replace('Location -- ', '')
              if ' - ' in loc_name:
                  city = ' '.join(loc_name.split(' - ')[:-1])
              else:
                  # for US stat files it is full name separated by spaces
                  city = ' '.join(loc_name.split()[:-2])
              country = loc_name.split(' ')[-1]
              source = self._header[6].strip().replace('Data Source -- ', '')
              station_id = self._header[8].strip().replace('WMO Station ', '')
              if iron_python:
                  # IronPython
                  coord_pattern = re.compile(r"{([NSEW])(\s*\d*)deg(\s*\d*)")
                  matches = coord_pattern.findall(self._header[3].replace('\xb0', 'deg'))
              else:
                  # CPython
                  coord_pattern = re.compile(r"{([NSEW])(\s*\d*) (\s*\d*)")
                  matches = coord_pattern.findall(self._header[3])
              lat_sign = -1 if matches[0][0] == 'S' else 1
              latitude = lat_sign * (float(matches[0][1]) + (float(matches[0][2]) / 60))
              lon_sign = -1 if matches[1][0] == 'W' else 1
              longitude = lon_sign * (float(matches[1][1]) + (float(matches[1][2]) / 60))
              time_zone = self._regex_check(r"{GMT\s*(\S*)\s*Hours}", self._header[3])
              elev_pattern = re.compile(r"Elevation\s*[-]*\s*(\d*)m\s*(\S*)")
              elev_matches = elev_pattern.findall(self._header[4])
              if len(elev_matches) == 0:
                  elev_pattern = re.compile(r"Elevation\s*[-]*\s*(\d*)\s*m\s*(\S*)")
                  elev_matches = elev_pattern.findall(self._header[4])
              elev_sign = -1 if elev_matches[0][-1].lower() == 'below' else 1
              elevation = elev_sign * float(elev_matches[0][0])
              self._location = Location()
              self._location.city = city
              self._location.country = country
              self._location.source = source
              self._location.station_id = station_id
              self._location.latitude = latitude
              self._location.longitude = longitude
              self._location.time_zone = time_zone
              self._location.elevation = elevation
  
              # pull out individual properties
              self._stand_press_at_elev = self._regex_check(
                  r"Elevation\s*[-]*\s*(\d*)", self._header[5])
              self._ashrae_climate_zone = self._regex_check(
                  r'Climate type\s"(\S*)"\s\(A', self._body)
              self._koppen_climate_zone = self._regex_check(
                  r'Climate type\s"(\S*)"\s\(K', self._body)
  
              # pull out extreme and seasonal weeks.
              self._extreme_hot_week = self._regex_week_parse(
                  r"Extreme Hot Week Period selected:"
                  "\s*(\w{3})\s*(\d{1,2}):\s*(\w{3})\s*(\d{1,2}),")
              self._extreme_cold_week = self._regex_week_parse(
                  r"Extreme Cold Week Period selected:"
                  "\s*(\w{3})\s*(\d{1,2}):\s*(\w{3})\s*(\d{1,2}),")
              self._typical_weeks = self._regex_typical_week_parse()
  
              # pull out annual design days
              winter_vals = self._regex_parse(r"Heating\s(\d.*)")
              for key, val in zip(DesignDay.heating_keys, winter_vals):
                  self._winter_des_day_dict[key] = val
              summer_vals = self._regex_parse(r"Cooling\s(\d.*)")
              for key, val in zip(DesignDay.cooling_keys, summer_vals):
                  self._summer_des_day_dict[key] = val
  
              # Pull out relevant monthly information
              self._monthly_tau_beam = self._regex_parse(r"taub \(beam\)(.*)")
              self._monthly_tau_diffuse = self._regex_parse(r"taud \(diffuse\)(.*)")
              self._monthly_db_50 = self._regex_parse(r"Drybulb 5.0%(.*)")
              self._monthly_wb_50 = self._regex_parse(r"Coincident Wetbulb 5.0%(.*)")
              self._monthly_db_100 = self._regex_parse(r"Drybulb 10.%(.*)")
              self._monthly_wb_100 = self._regex_parse(r"Coincident Wetbulb 10.%(.*)")
              self._monthly_db_20 = self._regex_parse(r"Drybulb 2.0%(.*)")
              self._monthly_wb_20 = self._regex_parse(r"Coincident Wetbulb 2.0%(.*)")
              self._monthly_db_04 = self._regex_parse(r"Drybulb 0.4%(.*)")
              self._monthly_wb_04 = self._regex_parse(r"Coincident Wetbulb 0.4%(.*)")
              self._monthly_db_range_50 = self._regex_parse(r"Drybulb range - DB 5%(.*)")
              self._monthly_wb_range_50 = self._regex_parse(r"Wetbulb range - DB 5%(.*)")
              self._monthly_wind = self._regex_parse(
                  r"Monthly Statistics for Wind Speed[\s\S]*Daily Avg(.*)")
              for direction in self._wind_dir_names:
                  re_string = r"Monthly Wind Direction %[\s\S]*" + direction + r"\s(.*)"
                  dirs = self._regex_parse(re_string)
                  if dirs != []:
                      self._monthly_wind_dirs.append(dirs)
              if self._monthly_wind_dirs == []:
                  self._monthly_wind_dirs = [[0] * 12 for i in xrange(8)]
  
          finally:
              statwin.close()