python3安装pygexf包

python 安装gexf插件时遇到问题及需修改的内容

安装pygexf

pip install pygexf

import gexf 或 from gexf import Gexf (用来测试一下是否安装成功,如果你是python 3.0以上版本,那么看一下出现问题的解决办法。)

如果找不到自己python安装在什么地方了。。。可以用下面的方法查看。

import sys
print(sys.path)

问题1:No module named’_gexf’

打开python下site-packages 文件夹,找到gexf文件夹,对文件夹内的__init__.py进行修改,将所有的__gexf之前加’.’(加一个 “点” )

问题2:TabError: inconsistent use of tabs and spaces in indentation

空格和tab空格位置不统一问题,打开_gexf.py文件,重新将代码格式重排一下即可解决。

问题3:except Exception, e

由于是python 2.0版本的,与3.0版本在编写格式上的不同,所以报错,这里 打开_gexf.py文件 修改成 except Exception as e: 解决。

同理还有一些print的问题,给print把括号加上 print() 即可。

问题4 :ModuleNotFoundError: No module named ‘lxml’

pip install lxml 解决

问题5:AttributeError: ‘dict’ object has no attribute ‘iteritems’ 错误提示。

是由于python3.5以后,iteritems 变为 items。
所有都改为:

for id, value in self._nodesAttributes.items()

问题6:TypeError: write() argument must be str, not bytes

原因为:Python3给open函数添加了名为encoding的新参数,而这个新参数的默认值却是‘utf-8’。这样在文件句柄上进行read和write操作时,系统就要求开发者必须传入包含Unicode字符的实例,而不接受包含二进制数据的bytes实例。

解决方法:使用二进制写入模式(‘wb’)来开启待操作文件,而不能像原来那样,采用字符写入模式(‘w’)。

可能比较麻烦,下面直接给出改好的代码

# -*- coding: utf-8 -*-
 
from lxml import etree
from datetime import *
 
 
# missing features : 
# load, validate, modify existing gexf file
# slices / phylogeny / ...
 
# evolution ideas :
# add display stats on graph composition when exportingto xml
# add anti-paralell edges test
# add a test based on existing example from gexf.net
# add modification accessors like setStart ...
# factorize attribute managment by creating an attribute class
# add a test code utility to check that code will not use _variable outside objects
 
class Gexf:
 
    def __init__(self, creator, description):
        self.creator = creator
        self.description = description
        self.graphs = []
        self.xmlns = "http://www.gephi.org/gexf/1.1draft"
        self.xsi = "http://www.w3.org/2001/XMLSchema-instance"
        self.schemaLocation = "http://www.gephi.org/gexf/1.1draft http://gephi.org/gexf/1.1draft.xsd"
        self.viz = "http://www.gexf.net/1.1draft/viz"
        self.version = "1.1"
 
    def addGraph(self, type, mode, label):
        g = Graph(type, mode, label)
        self.graphs.append(g)
        return g
 
    def getXML(self):
        gexfXML = etree.Element("{" + self.xmlns + "}gexf", version=self.version,
                                nsmap={
   None: self.xmlns, 'viz': self.viz, 'xsi': self.xsi})
        # 		gexfXML.set("xmlnsxsi",)
        gexfXML.set("{xsi}schemaLocation", self.schemaLocation)
        meta = etree.SubElement(gexfXML, "meta")
        meta.set("lastmodified", datetime.now().isoformat())
        etree.SubElement(meta, "creator").text = self.creator
        etree.SubElement(meta, "description").text = self.description
        for graph in self.graphs:
            gexfXML.append(graph.getXML())
 
        return gexfXML
 
    def write(self, file):
        file.write(etree.tostring(self.getXML(), pretty_print=True, encoding='utf-8'))
        self.print_stat()
 
    def print_stat(self):
        for graph in self.graphs:
            graph.print_stat()
 
 
class Graph:
 
    def __init__(self, type, mode, label, start="", end=""):
 
        # control variable
        self.authorizedType = ("directed", "undirected")
        self.authorizedMode = ("dynamic", "static")
        self.defaultType = "directed"
        self.defaultMode = "static"
        self.label = label
 
        if type in self.authorizedType:
            self.type = type
        else:
            self.type = self.defaultType
        if mode in self.authorizedMode:
            self.mode = mode
        else:
            self.mode = self.defaultMode
 
        self.start = start
 
        self.end = end
 
        self._nodesAttributes = {
   }
        self._edgesAttributes = {
   }
        self._nodes = {
   }
        self._edges = {
   }
 
    def addNode(self, id, label, start="", end="", pid="", r="", g="", b=""):
        self._nodes[id] = Node(self, id, label, start, end, pid, r, g, b)
        return self._nodes[id]
 
    def nodeExists(self, id):
        if id in self._nodes.keys():
            return 1
        else:
            return 0
 
    def addEdge(self, id, source, target, weight="", start="", end="", label=""):
        self._edges[id] = Edge(self, id, source, target, weight, start, end, label)
        return self._edges[id]
 
    def addNodeAttribute(self, title, defaultValue, type="integer", mode="static", force_id=""):
        # add to NodeAttributes
        # generate id
        if force_id == "":
            id = len(self._nodesAttributes)
        else:
            id = force_id
        self._nodesAttributes[id] = {
   "title": title, "default": defaultValue, "mode": mode,
                                     "type": type}  # modify Nodes with default
        #: bad idea and unecessary
        # for node in self._nodes.values():
        #	node.addAttribute(id,defaultValue)
 
        return id
 
    def addDefaultAttributesToNode(self, node):
        # add existing nodesattributes default values
        for id, values in self._nodesAttributes.iteritems():
            node.addAttribute(id, values["default"])
 
    def checkNodeAttribute
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值