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