python推数据及流处理扩展

python对于“流”的处理以generator为主,这种方式适合拉数据,不适合推数据。

做个简单的扩展,totrg类似imap的推数据版本(可以一对一、一对多、一对零,完成类似imap、filter等功能),preduce类似reduce,groupto类似groupby的推数据版本。

fromsrc与rotrg对应,方便处理输入输出,fromto从输入读出发送到输出,支持标准输入输出、文件、list、generator,groupkv对groupby的扩展。

#
#coding:utf8
import sys
from itertools import imap,groupby

def coroutine(func):
    '''协程修饰器,调用一次被修饰的函数即可创建生成器,不用调用next函数'''
    def newfunc(*args,**kwargs):
        r = func(*args,**kwargs)
        r.next()
        return r
    return newfunc

def fromsrc(src,func=None,multi=False,fargs=()):
    '''从src读取,对接受的数据进行处理,之后作为生成器的数据,func为处理函数,
    multi表示是否func的输出为一对多'''
    if src == sys.stdin:
        for data in src:
            if func:
                if multi:
                    for d in func(*((data.rstrip('\r\n'),)+fargs)):
                        yield d
                else:
                    yield func(*((data.rstrip('\r\n'),)+fargs))
            else:
                yield data.rstrip('\r\n')
    elif type(src) == str:
        for data in open(src):
            if func:
                if multi:
                    for d in func(*((data.rstrip('\r\n'),)+fargs)):
                       
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值