Beispiel #1
0
    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
Beispiel #2
0
    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