您的位置:首页 > 编程语言 > Python开发

运维的我要学开发--Python(5)

2014-05-06 20:30 351 查看
本文均来自Python Cookbook,本博文励志将Cookbook中的string部位,文件,面向对象编程部分完成,本系列博文陆续还会介绍flask框架,每篇博文都以一个个小例子展示。

#-*- coding: utf-8 -*-
'''
从zip文件中读取数据
'''
import zipfile
z = zipfile.ZipFile("flask-master.zip",'r')
for filename in z.namelist():
print 'File:',filename,
bytess = z.read(filename)
print 'has',len(bytess),'bytes'
'''
临时文件的产生
'''
import tempfile,os
handle,filename = tempfile.mkstemp('.txt')
os.close(handle)
print filename
os.unlink(filename)
#结果 c:\users\admini~1\appdata\local\temp\tmpapuidb.txt
#
'''
多文件归档到一个压缩的tar文件
'''
import tarfile,os
def make_tar(backup,dest,compression='bz2'):
#指定文件后缀名称
if compression:
dest_ext = '.'+compression
else:
dest_ext = ''
#获取打包目录的基目录
arcname = os.path.basename(backup)
#拼接打包文件的文件名称
dest_name = '%s.tar%s' % (arcname,dest_ext)
#拼接打包文件的存放路径
dest_path = os.path.join(dest,dest_name)
if compression:
dest_cmp = ":" + compression
else:
dest_cmp = ''
out = tarfile.TarFile.open(dest_path,'w'+dest_cmp)
out.add(backup,arcname)
out.close()
return dest_path
make_tar(".","F:\\")
'''
yield的用法
迭代器是一个对象,它实现了迭代器协议
一般需要实现如下两个方法:
1.next方法
2.__iter__方法
对于一个列表使用for循环来遍历的时候起本质
是在运行列表中的__iter__()函数然后返回其本身以后每次迭代都调用next()函数,
迭代器:
每次迭代使用的时候所使用的参数都是第一次所保留下的,
在整个所有函数调用的参数都是第一次所调用时保留的,而不是新创建的
'''
#一个迭代器的示列
class Fib:
'''''一个可以生成Fibonacci 数列的迭代器'''

def __init__(self, max):
self.max = max

def __iter__(self):
self.a = 0
self.b = 1
return self

def next(self):
fib = self.a
if fib > self.max:
raise StopIteration
self.a, self.b = self.b, self.a + self.b
return fib
test = Fib(100)
for i in test:
print i
#使用yield实现上述代码
def fib(max):
a, b = 0, 1
while a < max:
yield a
a, b = b,a + b
for j in fib(100):
print j
#上述运行过程解释:
'''
fib(100)的实现过程如下:
a,b = 0,1
while a <max:
yield a 运行到这就停止了 此时a = 0 所以第一次迭代的结果是0
然后当第二次迭代的时候会继续从yield a开始运行 此时a=b 为 1,然后继续while再次达到
yield a 此时第二次迭代的结果是a=1,依次类推直到while 循环条件不满足的时候引发StopIteration 异常
'''
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python flask fabric