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)
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")
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)
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)
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)
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")
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)