本文均来自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 异常
'''