一、hashlib 生成MD5值

[root@133systeminformation]#vimhashlib2.py#!/usr/bin/envpythonimporthashlibimportsysdefmd5sum(f):m=hashlib.md5()withopen(f)asfd:whileTrue:data=fd.read(4096)ifdata:m.update(data)else:breakreturnm.hexdigest()if__name__=='__main__':try:printmd5sum(sys.argv[1])exceptIndexError:print"%sfollowaargument"%__file__[root@133systeminformation]#pythonhashlib2.pyhashlib2.pyfollowaargument[root@133systeminformation]#pythonhashlib2.py/etc/passwd8cb5df95a0685c814cfacd0fef10dc1c

小试牛刀

一个文件全部是手机号码,每行一个,需要将该文件的每个手机号码md5处理

[root@133systeminformation]#vim1_md5.py#!/usr/bin/envpython#coding=utf-8importhashlibimportsysimportos.pathdefmd5sum(f):f_out=open('/tmp/out.txt','w')withopen(f)asfd:foriinfd.readlines():line=i.strip('\n')md=hashlib.md5(line)f_out.write(md.hexdigest()+'\n')if__name__=='__main__':try:printmd5sum(sys.argv[1])exceptIndexError:print"%sfollowaargument"%__file__[root@133systeminformation]#python1_md5.py非码+支付宝会员_喜欢牛肉_手机号码.txtNone[root@133systeminformation]#head/tmp/out.txt1ed73d40234d99ef1ecfb00264af98e8e85faa993080d67c5f791fdc015ad3d145a0515b1311341ae50c518999ba56e3254d3e8963dc301e2d06a4fbacae6b765861016350aa8a9e2242113d40f0c5c5aea768a8aac8c1e9ce74f7e9bb0a4a2b34a5fdef10ea2c4d3300848837f056332e3fa16b751d1df711f6271554c8074ccaad46ce2ad1287ea8a60dd13e9314f4d11598a9f78731f6911a1902990e8932



二、walk模块

os.walk

迭代目录里的文件

[root@133systeminformation]#vimwalk1.py#!/usr/bin/envpythonimporthashlibimportosimportsysdefmd5sum(f):m=hashlib.md5()withopen(f)asfd:whileTrue:data=fd.read(4096)ifdata:m.update(data)else:breakreturnm.hexdigest()a=os.walk(sys.argv[1])forp,d,fina:foriinf:fn=os.path.join(p,i)md5=md5sum(fn)printmd5+''+fn[root@133systeminformation]#pythonwalk1.py.27f8b178ef14f5e79d4e875977c320f1./yield1.py44ed2af7008a9e5bbd720495aaf07590./hashlib2.pyc38e72d0b260e35efc2d32dc75a7a34e./walk1.pyd41d8cd98f00b204e9800998ecf8427e./test/ad41d8cd98f00b204e9800998ecf8427e./test/b

三、yield生成器

生成器是一个可迭代的对象,可以对可迭代对象进行遍历,比如字符串,列表等,都是可迭代对象

生成器对象


生成器是一个可迭代的对象,可以对可迭代对象进行遍历,比如字符串,列表等,都是可迭代对象


当使用for进行迭代的时候,函数内的代码才会被执行


mygenerator = (x*x for x in range(4))


next()方法

mygenerator.next()

[root@133systeminformation]#vimyield1.py#!/usr/bin/envpythondefh():print'one'yield1print'two'yield2print'three'yield3a=h()ipythonIn[1]:deff(n):...:foriinrange(n):...:yieldi...:In[11]:aOut[11]:<generatorobjectfat0x7fcb11732be0>In[4]:a.next()Out[4]:0In[5]:a.next()Out[5]:1In[6]:a.next()Out[6]:2In[7]:a.next()Out[7]:3In[8]:a.next()Out[8]:4In[9]:a.next()Out[9]:5In[10]:a.next()---------------------------------------------------------------------------StopIterationTraceback(mostrecentcalllast)<ipython-input-10-aa817a57a973>in<module>()---->1a.next()In[14]:a=f(5)In[15]:foriina:printi01234


return与yield区别

return的时候这个函数的局部变量就都销毁了

所有return是得到所有结果之后的返回

yield是产生了一个可以恢复的函数(生成器),恢复了局部变量。

生成器只有在调用.next()时才运行函数生成一个结果