example

2017-05-03  本文已影响0人  紫炎seraph

importsys

classReader(object):

def__init__(self):

self.data =self._read()

@staticmethod

def_read():

data = []

withopen('data.txt')asfobj:

forlineinfobj:

data.append(tuple(line.split()))

returndata

@staticmethod

def_read(self):

returntuple(tuple(line.split())forlineinopen('data.txt'))

defread_forever(fobj):

importtime

whileTrue:

line = fobj.readline()

if notline:

time.sleep(0.1)

continue

yieldline

deffilter_comments(lines):

forlineinlines:

if notline.strip().startswith('#'):

yieldline

defget_number(lines):

forlineinlines:

yieldint(line.split()[-1])

definit_coroutine(func):

importfunctools

functools.wraps(func)

definit(*args, **kwargs):

gen = func(*args, **kwargs)

next(gen)

returngen

returninit

defread_forever(fobj, target):

importtime

whileTrue:

line = fobj.readline()

if notline:

time.sleep(0.1)

continue

target.send(line)

@init_coroutine

deffilter_comments(target):

target = {'debug':lambdaline:sum(line)}

while(True):

line =yield

if notline.strip().startswith('#'):

target.send(line)

@init_coroutine

defget_number(target):

whileTrue:

line =yield

level, number = line.split(':')

number =int(number)

target[level].send(number)

@init_coroutine

deffatal():

sum_ =0

whileTrue:

value =yield

sum_ += value

sys.stdout.write("FATAL: %d"% sum_)

sys.stdout.flush()

@init_coroutine

defdebug():

sum_ =0

whileTrue:

value =yield

sum_ += value

sys.stdout.write("DEBUG: %d"% sum_)

sys.stdout.flush()

@init_coroutine

deferror():

sum_ =0

whileTrue:

value =yield

sum_ += value

sys.stdout.write("ERROR: %d"% sum_)

sys.stdout.flush()

TARGETS = {'DEBUG': debug(),

'ERROR': error(),

'FATAL': fatal()}

defshow_sum(file_name='out.txt'):

read_forever(open(file_name), filter_comments(get_number(TARGETS)))

defshow_num_1(file_name):

lines = Reader.read_forever(open(file_name))

sum =0

importsys

try:

fornuminReader.get_number(Reader.filter_comments(lines)):

sum += num

sys.stdout.write('sum: %d'% sum)

sys.stdout.flush()

exceptKeyboardInterrupt:

print'sum', sum

上一篇下一篇

猜你喜欢

热点阅读