Python的levelDB实现——实习笔记

来源:互联网 发布:淘宝直播点赞要钱吗 编辑:程序博客网 时间:2024/06/06 06:57

实习做的最靠谱的东西,不过只是其中一个部分,这代码算是公司的吧(之前的软考不是白考的,不过想想也知道~),所以没有贴出来全部,不过他们也说了要放到github上,只是时间问题,- -我个人觉得是我代码太丑了,所以他们就没好意思放上去。。。。


确实写的很丑,风格丑!!!!不是效率低。。。感觉Python的风格和Java的是两个极端,被Java先入为主了,所以Python的风格就很差劲。。。


levelDB会在本地创建一个文件目录,个人觉得还是比较nice的一种嵌入式KV数据库,不过,据说最近出了一个LMDB,堪称LevelDB杀手,貌似很萌的样子,看了一下实现过程,对于我所应用的程序,完全没有影响,而且和levelDB一样也是嵌入式、开源、有Python源码,可以很好的移植到我的脚本中,但时间问题,就不去具体实现了吧。


#---------------------------- DB ----------------------------------------class LevelDB:    """        元数据的操作    """    def __init__(self, SRC_DIR, DBDIR, OverWrite=False):        self.SRC_DIR = SRC_DIR        self.DBDIR = DBDIR        if OverWrite:            self.ClearDBFile()        if os.access(os.path.dirname(self.DBDIR), os.W_OK):            self.levDB = leveldb.LevelDB(self.DBDIR)        else:            LOGGER.error(self.DBDIR.join([" Permission Denied! ", " Need Write Access!"]))            LOGGER.error("LevelDB server run failed!\n")            self.levDB = None    def ClearDBFile(self):        for root, dirs, files in os.walk(self.DBDIR, topdown=False):            for name in files:                os.remove(os.path.join(root, name))            for name in dirs:                os.rmdir(os.path.join(root, name))    def reLoadLevelDB(self):        self.levDB = leveldb.LevelDB(self.DBDIR)    def getFileFromSQL(self, fapath):        if self.levDB is None: return        LOGGER.debug("".join(["getFileFromSQL: ", fapath[self.SRC_DIR.__len__():]]))        try:            resObj = self.levDB.Get(fapath[self.SRC_DIR.__len__():])        except KeyError, ker:            LOGGER.debug(fapath[self.SRC_DIR.__len__():] + " not found!")            return None        except UnicodeEncodeError, ueer:            LOGGER.debug("".join(["Chinese character coding file: ", fapath[self.SRC_DIR.__len__():]]))            try:                resObj = self.levDB.Get(fapath[self.SRC_DIR.__len__():].encode("utf-8"))            except KeyError, ker:                return None        return resObj    def insertFileToSQL(self, fpath):        if self.levDB is None: return        LOGGER.debug(            "".join(["File.Put: key: ", fpath[self.SRC_DIR.__len__():], " value: ", getLastModifyTime(fpath)]))        try:            self.levDB.Put(fpath[self.SRC_DIR.__len__():], getLastModifyTime(fpath))        except UnicodeEncodeError, ueer:            self.levDB.Put(fpath[self.SRC_DIR.__len__():].encode("utf-8"), getLastModifyTime(fpath))    def insertPathToSQL(self, fpath):        if self.levDB is None: return        LOGGER.debug("".join(["Path.Put: key: ", fpath[self.SRC_DIR.__len__():], " value: ok"]))        try:            self.levDB.Put(fpath[self.SRC_DIR.__len__():], "1")        except UnicodeEncodeError, ueer:            self.levDB.Put(fpath[self.SRC_DIR.__len__():].encode("utf-8"), "1")    def getPathFromSQL(self, fpath):        if self.levDB is None: return False        LOGGER.debug("".join(["getPathFromSQL: ", fpath[self.SRC_DIR.__len__():]]))        try:            return self.levDB.Get(fpath[self.SRC_DIR.__len__():])        except KeyError, ker:            LOGGER.debug(fpath[self.SRC_DIR.__len__():] + " not found!")            return False        except UnicodeEncodeError, ueer:            LOGGER.debug("".join(["Chinese character coding file: ", fpath[self.SRC_DIR.__len__():]]))            try:                return self.levDB.Get(fpath[self.SRC_DIR.__len__():].encode("utf-8"))            except KeyError, ker:                return False 



0 0