浏览 1870 次
锁定老帖子 主题:Python获取JE用户头像 代码优化
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-26
发现昨天写的获取用户头像的代码效率有点低,于是今天重新设计了一下。 上代码: 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 这样就节省了生成流水号,保存流水号和计算流水号带来的一些效率上的损失。 ------------------------------- 有时候有些事情想得太复杂了。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |