【详解】Python统一解密再改进版逻辑分析
2015-11-09 15:14
537 查看
虽然经过了一次改进,但依然改了好多次才确定了最终版代码。
中间遇到了很多次可以简化的问题,究其原因,是因为一开始的逻辑就没有思考清楚,导致代码做了很多重复无用的工作!
现在对最终版代码做一次梳理,对其中可以简化的逻辑进行重点说明!
1. 进入主方法
login的登录方法不赘述
2. 进入toWrite()方法
getContent 方法获取所有要写入的数据,这部分数据从数据库中取出。
接下类解析获得的content,解析为可以方便写入的数据后,才能够进行写入!
3.进入resolveContent()方法
开始解析。
我们可以看到,其中部分数据可以直接拿来使用,或者经过了简单的方法就可以直接使用。如:
id、encodeid、gamename、goodsurl。
剩下的servername、decodename、decodepwd、都是需要进行别的操作才能够得到的。
无非是再连数据库取数据,加密解密,不再赘述。
目前为止,两处简化过的核心逻辑需要注意。
一、从数据库中取数据,运行一次SQL语句即可做到,不用多次运行,如果多次运行,不仅拉长了脚本运行时间,做了无用功,还给数据库带来了不必要的压力;
二、加密解密,访问url一次就足可以将所有待解密的密文传输到后台解密,不必一次次解密。这样减轻了对解密后台的压力。
4.开始写入,进入writeTxt方法。
这里注意一点。
这一句,只需要打开一次就行了,然后关闭一次。
也是需要重视的,如果每次写入都要重新开,无端白做了很多操作。
打开,然后循环写入,才是比较科学的方法。
最后的发送邮件不再赘述。
【注意】
1. 访问解密url是最废时间的。
我们要注意,这里解密时要访问解密后台的url链接,只访问一次可以减轻后台压力,同时,
同等重要的一点是,可以加快脚本运行速度。因为我们平时打开一个普通的网页,网速一般时,需要花费数秒,如果访问很多次url,
相当于打开n多网页,花费的时间自然很多。
2. 方法调用。
加密解密的方法中,我们实现了一次访问就可以获得解密数据。但同时也要注意,
该方法不要放到循环体中,因为每一次循环都要运行方法的话,相当于还是遍历访问url,很费时间和资源。
即,方法一定要注意:
能减少运行次数就减少运行次数!!
中间遇到了很多次可以简化的问题,究其原因,是因为一开始的逻辑就没有思考清楚,导致代码做了很多重复无用的工作!
现在对最终版代码做一次梳理,对其中可以简化的逻辑进行重点说明!
1. 进入主方法
if __name__ == '__main__': try: main() finally: if tradeDBUtil: tradeDBUtil.close()
def main(): print "===%s start===%s"%(sys.argv[0], datetime.datetime.strftime(datetime.datetime.now(), "%Y-%m-%d %H:%M:%S")) login() toWrite() sendEmail() print "===%s end===%s"%(sys.argv[0], datetime.datetime.strftime(datetime.datetime.now(), "%Y-%m-%d %H:%M:%S"))
login的登录方法不赘述
2. 进入toWrite()方法
def toWrite(): #准备写入txt content = getContent() content=resolveContent(content) writeTxt(content)
getContent 方法获取所有要写入的数据,这部分数据从数据库中取出。
def getContent(): #获取数据库内容 goodsIdStr = get360GoodsStr() sql='SELECT SG.ID,V.GAME_NAME,SG.SERVER_ID,SG.ATTRS_VALUE FROM netgame_trade.SELLING_GOODS SG LEFT JOIN netgame_trade.SELLING_GOODS_PIC P ON P.SELLING_GOODS_ID = SG.ID INNER JOIN netgame_trade.SELLING_GOODS_VIDEO_RECORD V ON V.SELLING_GOODS_ID = SG.ID WHERE SG.GAME_ID = 1027 AND SG.`STATUS` = 1 AND SG.SELLING_STATUS = 0 AND SG.IS_VISIBLE = 1 AND SG.GOODS_ID IN(%s) AND ISNULL(P.ID) ORDER BY SG.ID DESC LIMIT 30'%(goodsIdStr) rows = tradeDBUtil.queryList(sql) return rows
接下类解析获得的content,解析为可以方便写入的数据后,才能够进行写入!
3.进入resolveContent()方法
开始解析。
def resolveContent(content): #解析获取到的内容 length = len(content) resolvedcontent=[None]*length data = getDecodeData(content) for i in range(length): iresolvedcontent=[None]*7 icontent = content[i] id = str(icontent[0]) encodeid=getSellingGoodsNo(id) gamename = str(icontent[1]).decode('utf-8').encode('gbk') servername = str(getServerName(icontent[2])).decode('utf-8').encode('gbk') decodename = data['decode'+str(i)].decode('utf-8').encode('gbk') decodepwd = data['decode'+str(i+length)] goodsurl="http://www.moyoyo.com/goods-detail-"+str(encodeid) iresolvedcontent[0]=id iresolvedcontent[1]=encodeid iresolvedcontent[2]=gamename iresolvedcontent[3]=servername iresolvedcontent[4]=decodename iresolvedcontent[5]=decodepwd iresolvedcontent[6]=goodsurl resolvedcontent[i]=iresolvedcontent return resolvedcontent
我们可以看到,其中部分数据可以直接拿来使用,或者经过了简单的方法就可以直接使用。如:
id、encodeid、gamename、goodsurl。
剩下的servername、decodename、decodepwd、都是需要进行别的操作才能够得到的。
无非是再连数据库取数据,加密解密,不再赘述。
目前为止,两处简化过的核心逻辑需要注意。
一、从数据库中取数据,运行一次SQL语句即可做到,不用多次运行,如果多次运行,不仅拉长了脚本运行时间,做了无用功,还给数据库带来了不必要的压力;
二、加密解密,访问url一次就足可以将所有待解密的密文传输到后台解密,不必一次次解密。这样减轻了对解密后台的压力。
4.开始写入,进入writeTxt方法。
def writeTxt(content): #写入txt文件 f = open(fileName, 'a') for i in range(len(content)): f.write("SELLING_GOODS_ID: "+content[i][0]+',') f.write("加密后SELLING_GOODS_ID: ".decode('utf-8').encode('gbk')+content[i][1]+',') f.write("游戏名称: ".decode('utf-8').encode('gbk')+content[i][2]+',') f.write("服务器名称: ".decode('utf-8').encode('gbk')+content[i][3]+',') f.write("账户: ".decode('utf-8').encode('gbk')) f.write(content[i][4]+',') f.write("密码: ".decode('utf-8').encode('gbk')) f.write(content[i][5]+',') f.write("商品URL: ".decode('utf-8').encode('gbk')+content[i][6]+'\n') f.close()
这里注意一点。
f = open(fileName, 'a')
这一句,只需要打开一次就行了,然后关闭一次。
f.close()
也是需要重视的,如果每次写入都要重新开,无端白做了很多操作。
打开,然后循环写入,才是比较科学的方法。
最后的发送邮件不再赘述。
【注意】
1. 访问解密url是最废时间的。
我们要注意,这里解密时要访问解密后台的url链接,只访问一次可以减轻后台压力,同时,
同等重要的一点是,可以加快脚本运行速度。因为我们平时打开一个普通的网页,网速一般时,需要花费数秒,如果访问很多次url,
相当于打开n多网页,花费的时间自然很多。
2. 方法调用。
加密解密的方法中,我们实现了一次访问就可以获得解密数据。但同时也要注意,
该方法不要放到循环体中,因为每一次循环都要运行方法的话,相当于还是遍历访问url,很费时间和资源。
即,方法一定要注意:
能减少运行次数就减少运行次数!!
相关文章推荐
- 《用Python玩转数据》第1周学习笔记(Part2)
- 尝试使用Python多线程抓取代理服务器IP地址的示例
- 关于selenium 用Webdrive打开Firefox不含有插件的问题(python)
- 使用Python实现BT种子和磁力链接的相互转换
- Python中MySQLdb和torndb模块对MySQL的断连问题处理
- python 文件操作
- python数据挖掘常用包
- Python之路【第三篇】:Python基础(二)
- 利用doxygen生成python文档
- 使用Python对IP进行转换的一些操作技巧小结
- 64位win&python2.7下gensim环境搭建
- python 多个相同字符串
- python中添加日志记录到文件
- Python第三方库代码总结
- python调用shell
- python实现目录树
- 2015/11/9用Python写游戏,pygame入门(8):按钮和游戏结束
- python培训Day3 随笔
- python下的orm基本操作(1)--Mysql下的CRUD简单操作(含源码DEMO)
- Python version 2.7 required, which was not found i