六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 45|回复: 0

Python获取JE用户头像 代码优化

[复制链接]

升级  36%

30

主题

30

主题

30

主题

秀才

Rank: 2

积分
104
 楼主| 发表于 2013-1-15 02:59:39 | 显示全部楼层 |阅读模式
发现昨天写的获取用户头像的代码效率有点低,于是今天重新设计了一下。
上代码:
    def getLogo(self, path=None, user=None, remote=False, localForld=APP_LOCAL_LOGO_FORLD_PATH):        '''获取用户头像(此方法会将头像保存至本地,下次获取将获取本地图像)        @param path:用户头像路径(服务器路径)        @param user:用户        @param remote: 是否从远程读取        @param localForld: 本地存储路径 默认:config.APP_LOCAL_LOGO_FORLD_PATH        @see: config.APP_LOCAL_LOGO_FORLD_PATH        @return: 存储在本地的路径(str)        '''        if not path and not user:            return None        if not path and "logo" in user:            path = user["logo"]        localpath = self.getLocalLogoPath(path, localForld)                if os.path.exists(localpath) and not remote:            print "logo has exists in local!"            return localpath        request = Request(JE_URL + path)        f = sendRequest(request)        return self.saveLogo(path, f["data"], localForld)                def saveLogo(self, path, data, localForld=APP_LOCAL_LOGO_FORLD_PATH):        '''将头像保存至本地,生成本地序列号(文件名)        @param path:服务器上的路径        @param data:从服务器获取到的头像数据        @param localForld:本地文件夹路径        '''        localPath = self.getLocalLogoPath(path, localForld)        if not os.path.exists(localPath) and makeDir(os.path.dirname(localPath)):            f = open(localPath, "w")            try:                f.write(data)                return localPath            finally:                if f:f.close()        def getLocalLogoPath(self, path, localForld=APP_LOCAL_LOGO_FORLD_PATH):        '''获取服务器logo映射到本地logo的路径        @param path:服务器路径        @param localForld:本地存放logo文件夹        '''        if path[0] == '/':            path = path[1:]        return os.path.join(localForld, path) 去掉了流水号作为文件名的机制,采用 服务器路径->本地路径 的直接转换,比如服务器路径为  /upload/xxx/xx/22.jpg,则本地路径就是/home/xx/upload/xxx/xx/22.jpg。其中用到的一个额外的函数(makeDir),是自己写的一个递归创建目录的方法。方法代码如下:
def makeDir(path):    '''创建目录,如果父目录不存在则递归创建父目录    @param path: 目录全路径    '''    if os.path.exists(path):        return True    parentDir = os.path.dirname(path)#获取父目录    if not os.path.exists(parentDir):        makeDir(parentDir)#如果父目录不存在,就先创建父目录    os.mkdir(path)    return True 这样就节省了生成流水号,保存流水号和计算流水号带来的一些效率上的损失。
-------------------------------
有时候有些事情想得太复杂了。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表