def save(self, filename: str, extention='csv', zipmode='w', **kwargs): """ Write two CSV/TSV files representing the node set and edge set of a graph, and zip them in a .tar file. """ if extention not in self._extention_types: raise Exception('Unsupported extention: ' + extention) if not filename.endswith('.tar'): filename += '.tar' delimiter = self._extention_types[extention] nodes_content = self.export_nodes().to_csv(sep=delimiter, index=False) edges_content = self.export_edges().to_csv(sep=delimiter, index=False) nodes_file_name = 'nodes.' + extention edges_file_name = 'edges.' + extention def add_to_tar(tar, filename, filecontent): content = filecontent.encode() with TemporaryFile() as tmp: tmp.write(content) tmp.seek(0) info = tarfile.TarInfo(name=filename) info.size = len(content) tar.addfile(tarinfo=info, fileobj=tmp) make_path(filename) with tarfile.open(name=filename, mode=zipmode) as tar: add_to_tar(tar, nodes_file_name, nodes_content) add_to_tar(tar, edges_file_name, edges_content) return filename
def save(self, filename: str, extension: str = 'csv', mode: str = 'w', **kwargs) -> str: """ Writes two files representing the node set and edge set of a networkx.MultiDiGraph, and add them to a .tar archive. Parameters ---------- filename: str Name of tar archive file to create extension: str The output file format (csv, by default) mode: str Form of compression to use ('w', by default, signifies no compression) kwargs: dict Any additional arguments """ if extension not in _extension_types: raise Exception('Unsupported extension: ' + extension) archive_name = "{}.{}".format(filename, _archive_format[mode]) delimiter = _extension_types[extension] nodes_content = self.export_nodes().to_csv(sep=delimiter, index=False, escapechar="\\", doublequote=False) edges_content = self.export_edges().to_csv(sep=delimiter, index=False, escapechar="\\", doublequote=False) nodes_file_name = 'nodes.' + extension edges_file_name = 'edges.' + extension make_path(archive_name) with tarfile.open(name=archive_name, mode=mode) as tar: PandasTransformer._add_to_tar(tar, nodes_file_name, nodes_content) PandasTransformer._add_to_tar(tar, edges_file_name, edges_content) return filename