def import_locations(self, data):
        """Parse `GNU miscfiles`_ cities data files.

        ``import_locations()`` returns a list containing :class:`City` objects.

        It expects data files in the same format that `GNU miscfiles`_
        provides, that is::

            ID          : 1
            Type        : City
            Population  : 210700
            Size        : 
            Name        : Aberdeen
             Country    : UK
             Region     : Scotland
            Location    : Earth
             Longitude  : -2.083
             Latitude   :   57.150
             Elevation  : 
            Date        : 19961206
            Entered-By  : Rob.Hooft@EMBL-Heidelberg.DE
            //
            ID          : 2
            Type        : City
            Population  : 1950000
            Size        : 
            Name        : Abidjan
             Country    : Ivory Coast
             Region     : 
            Location    : Earth
             Longitude  : -3.867
             Latitude   :    5.333
             Elevation  : 
            Date        : 19961206
            Entered-By  : Rob.Hooft@EMBL-Heidelberg.DE

        When processed by ``import_locations()`` will return ``list`` object in
        the following style::

            [City(1, "City", 210700, None, "Aberdeen", "UK", "Scotland",
                  "Earth", -2.083, 57.15, None, (1996, 12, 6, 0, 0, 0, 4,
                  341, -1), "Rob.Hooft@EMBL-Heidelberg.DE"),
             City(2, "City", 1950000, None, "Abidjan", "Ivory Coast", "",
                  "Earth", -3.867, 5.333, None, (1996, 12, 6, 0, 0, 0, 4,
                  341, -1), "Rob.Hooft@EMBL-Heidelberg.DE")])

        Args:
            data (iter): :abbr:`NOAA (National Oceanographic and Atmospheric Administration)`
                station data to read

        Returns:
            list: Places as ``City`` objects

        Raises:
            TypeError: Invalid value for data

        .. _GNU miscfiles: http://directory.fsf.org/project/miscfiles/
        """
        self._data = data
        if hasattr(data, 'read'):
            data = data.read().split('//\n')
        elif isinstance(data, list):
            pass
        elif isinstance(data, basestring):
            data = open(data).read().split('//\n')
        else:
            raise TypeError('Unable to handle data of type %r' % type(data))

        keys = ('identifier', 'ptype', 'population', 'size', 'name', 'country',
                'region', 'location', 'longitude', 'latitude', 'altitude',
                'date', 'entered')

        for record in data:
            # We truncate after splitting because the v1.4.2 datafile contains
            # a broken separator between 229 and 230 that would otherwise break
            # the import
            data = [i.split(':')[1].strip() for i in record.splitlines()[:13]]
            entries = dict(zip(keys, data))

            # Entry for Utrecht has the incorrect value of 0.000 for elevation.
            if entries['altitude'] == '0.000':
                logging.debug("Ignoring `0.000' value for elevation in %r "
                              'entry' % record)
                entries['altitude'] = ''
            for i in ('identifier', 'population', 'size', 'altitude'):
                entries[i] = int(entries[i]) if entries[i] else None
            for i in ('longitude', 'latitude'):
                entries[i] = float(entries[i]) if entries[i] else None
            entries['date'] = time.strptime(entries['date'], '%Y%m%d')
            self.append(City(**entries))
Parse `GNU miscfiles`_ cities data files.

        ``import_locations()`` returns a list containing :class:`City` objects.

        It expects data files in the same format that `GNU miscfiles`_
        provides, that is::

            ID          : 1
            Type        : City
            Population  : 210700
            Size        : 
            Name        : Aberdeen
             Country    : UK
             Region     : Scotland
            Location    : Earth
             Longitude  : -2.083
             Latitude   :   57.150
             Elevation  : 
            Date        : 19961206
            Entered-By  : Rob.Hooft@EMBL-Heidelberg.DE
            //
            ID          : 2
            Type        : City
            Population  : 1950000
            Size        : 
            Name        : Abidjan
             Country    : Ivory Coast
             Region     : 
            Location    : Earth
             Longitude  : -3.867
             Latitude   :    5.333
             Elevation  : 
            Date        : 19961206
            Entered-By  : Rob.Hooft@EMBL-Heidelberg.DE

        When processed by ``import_locations()`` will return ``list`` object in
        the following style::

            [City(1, "City", 210700, None, "Aberdeen", "UK", "Scotland",
                  "Earth", -2.083, 57.15, None, (1996, 12, 6, 0, 0, 0, 4,
                  341, -1), "Rob.Hooft@EMBL-Heidelberg.DE"),
             City(2, "City", 1950000, None, "Abidjan", "Ivory Coast", "",
                  "Earth", -3.867, 5.333, None, (1996, 12, 6, 0, 0, 0, 4,
                  341, -1), "Rob.Hooft@EMBL-Heidelberg.DE")])

        Args:
            data (iter): :abbr:`NOAA (National Oceanographic and Atmospheric Administration)`
                station data to read

        Returns:
            list: Places as ``City`` objects

        Raises:
            TypeError: Invalid value for data

        .. _GNU miscfiles: http://directory.fsf.org/project/miscfiles/