Example #1
0
 def write_npz(self, path, *, compress=False):
     """
     Write data frame to NumPy file `path`.
     """
     util.makedirs_for_file(path)
     savez = np.savez_compressed if compress else np.savez
     savez(path, **self)
Example #2
0
    def write(self, path, *, encoding="utf-8", **kwargs):
        """
        Write data to GeoJSON file `path`.

        Will automatically compress if `path` ends in ``.bz2|.gz|.xz``.

        `kwargs` are passed to ``json.dump``.
        """
        kwargs.setdefault("default", str)
        kwargs.setdefault("ensure_ascii", False)
        indent_width = kwargs.pop("indent", 2) or 0
        indent1 = " " * indent_width * 1
        indent2 = " " * indent_width * 2
        if "geometry" not in self:
            raise ValueError("Geometry missing")
        data = self.to_list_of_dicts()
        util.makedirs_for_file(path)
        with util.xopen(path, "wt", encoding=encoding) as f:
            f.write("{\n")
            for key, value in self.metadata.items():
                blob = json.dumps(value, **kwargs)
                f.write(f'{indent1}"{key}": {blob},\n')
            f.write(f'{indent1}"features": [\n')
            for i, item in enumerate(data):
                geometry = item.pop("geometry")
                blob = {
                    "type": "Feature",
                    "properties": item,
                    "geometry": geometry
                }
                blob = json.dumps(blob, **kwargs)
                comma = "," if i < len(data) - 1 else ""
                f.write(f"{indent2}{blob}{comma}\n")
            f.write(f"{indent1}]\n")
            f.write("}\n")
Example #3
0
    def write_csv(self, path, *, encoding="utf-8", header=True, sep=","):
        """
        Write data frame to CSV file `path`.

        Will automatically compress if `path` ends in ``.bz2|.gz|.xz``.
        """
        pddf = self.to_pandas()
        util.makedirs_for_file(path)
        pddf.to_csv(path, sep=sep, header=header, index=False, encoding=encoding)
Example #4
0
    def write_pickle(self, path):
        """
        Write data frame to Pickle file `path`.

        Will automatically compress if `path` ends in ``.bz2|.gz|.xz``.
        """
        util.makedirs_for_file(path)
        with util.xopen(path, "wb") as f:
            out = {k: np.array(v, v.dtype) for k, v in self.items()}
            pickle.dump(out, f, pickle.HIGHEST_PROTOCOL)
Example #5
0
    def write_pickle(self, path):
        """
        Write list to Pickle file `path`.

        Will automatically compress if `path` ends in ``.bz2|.gz|.xz``.
        """
        util.makedirs_for_file(path)
        with util.xopen(path, "wb") as f:
            out = [dict(x) for x in self]
            pickle.dump(out, f, pickle.HIGHEST_PROTOCOL)
Example #6
0
    def write_json(self, path, *, encoding="utf-8", **kwargs):
        """
        Write list to JSON file `path`.

        Will automatically compress if `path` ends in ``.bz2|.gz|.xz``.

        `kwargs` are passed to ``json.JSONEncoder``.
        """
        kwargs.setdefault("default", str)
        kwargs.setdefault("ensure_ascii", False)
        kwargs.setdefault("indent", 2)
        util.makedirs_for_file(path)
        with util.xopen(path, "wt", encoding=encoding) as f:
            encoder = json.JSONEncoder(**kwargs)
            for chunk in encoder.iterencode(self):
                f.write(chunk)
            f.write("\n")
Example #7
0
    def write_csv(self, path, *, encoding="utf-8", header=True, sep=","):
        """
        Write list to CSV file `path`.

        Will automatically compress if `path` ends in ``.bz2|.gz|.xz``.
        """
        if not self:
            raise ValueError("Cannot write empty CSV file")
        # Take a superset of all keys.
        keys = util.unique_keys(itertools.chain(*self))
        util.makedirs_for_file(path)
        with util.xopen(path, "wt", encoding=encoding) as f:
            writer = csv.DictWriter(f,
                                    keys,
                                    dialect="unix",
                                    delimiter=sep,
                                    quoting=csv.QUOTE_MINIMAL)

            writer.writeheader() if header else None
            for item in self:
                # Fill in missing as None.
                item = {**dict.fromkeys(keys), **item}
                writer.writerow(item)