首页 > 其他 > 详细

迭代器的应用

时间:2017-04-12 02:39:43      阅读:112      评论:0      收藏:0      [点我收藏+]

迭代器的应用  

文件名:a.txt,文件内容如下:
    apple 10 3
    tesla 100000 1
    mac 3000 2
    lenovo 30000 3
    chicken 10 3
  实现功能:cat a.txt |grep apple
    要求1:定义迭代器函数cat
    要求2:定义迭代器函数grep
    要求3:模拟管道的功能,将cat的处理结果作为grep的输入

 

追加的代码文件:

#追加的代码
with open(‘a.txt‘,‘a+‘,encoding=‘utf-8‘) as f:
    while True:
        dl = input(‘请输入你的内容(q退出):‘)
        if dl.lower() ==‘q‘:
            break
        else:
            f.write(dl+‘\n‘)

  

查看动态追加的代码:

文件是atxt

import time
########动态查看添加文件的内容 cat
def get(acth):
    with open(acth,‘a+‘,encoding=‘utf-8‘) as f:
        f.seek(0,2)
        while True:
            line = f.readline()
            if not line:
                time.sleep(.3)
                # print(‘-------->‘)
                continue
            else:
                yield line.strip()

g = get(‘a.txt‘)
# print(next(g))
for line in g:
    print(line)



########动态查看文件追加过滤出来的内容  grup
def get(acth):
    with open(acth,‘a+‘,encoding=‘utf-8‘) as f:
        f.seek(0,2)
        while True:
            line = f.readline()
            if not line:
                time.sleep(.3)
                # print(‘-------->‘)
                continue
            elif ‘apple‘ in line:
                yield line
g = get(‘a.txt‘)
# print(next(g))
# for line in g:
#     print(line)
while True:
    try:
        ne = next(g)
        print(ne.strip())
    except StopIteration:
        break



###########管道流.....
#定义阶段
def get(acth):
    with open(acth,‘a+‘,encoding=‘utf-8‘) as f:
        f.seek(0,2)
        while True:
            line = f.readline()
            if not line:
                time.sleep(.3)
                continue
            else:
                yield line.strip()
def grup(pattern,lines):
    for line in lines:
        if pattern in line:
            yield line

#调用阶段
g = get(‘a.txt‘)
g1 = grup(‘apple‘,g)

#next触发执行g1生成器函数
for i in g1:
    print(i)

  

 

生成器的使用

把下述函数改成生成器的形式,执行生成器函数的到一个生成器g,然后每次g.send(url),打印页面的内容,利用g可以无限send

from urllib.request import urlopen
def get():
    print(‘strat‘)
    while True:
        url = yield
        print(urlopen(‘%s‘%url).read())

g = get()
g.__next__()
g.send(‘http://www.baidu.com‘)
g.send(‘http://www.taobao.com‘)

  

 

迭代器的应用

原文:http://www.cnblogs.com/yangxiang1/p/6696867.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!