python 计数器_Python每次写入fi时都将计数器增加1

您真的应该编写一个包装类并使用它而不是一个普通的file:class CountingWrapper(object):

def __init__(self, *args, **kwargs):

self.segment_count = 0

self.f = open(*args, **kwargs)

def write(self, *args, **kwargs):

self.segment_count += 1

return self.f.write(*args, **kwargs)

payloadRecon = CountingWrapper('TCPStreamPayload.txt', 'a')

payloadRecon.write('dsfsd')

assert payloadRecon.count == 1

或者,如果您只是尝试将这三行代码包装起来,这样就不必不断重复,您可以编写一个包装函数:segmentCount = 0

def payload_write(f, *args, **kwargs):

global segmentCount

segmentCount += 1

return f.write(*args, **kwargs)

现在,您只需要这一行来计数和写入:payload_write(payloadRecon, '####TCP PAYLOAD STREAM RECONSTRUCTION. Segment ' + str(segmentCount) + '######' '\n\n\n\n')

assert segmentCount == 1

如果需要包装多个方法,则该类更加灵活。但你显然需要委托你关心的任何其他方法。当然,您可以通过__getattr__动态地执行委派。或者你可以使用继承权。(但请记住,在3.x中,类不是file,而是io包中的一个类,无论如何,您不应该通过构造函数创建file或io.whatever,而是通过open,因此您仍然需要编写包装器工厂函数来替换open。好消息是,这意味着您不需要处理__new__,只需要处理__init__。)

在3.x中,您甚至可以对实例进行monkeypatch(但这在2.x中不起作用,因为file.write是只读的):payloadRecon = open('TCPStreamPayload.txt', 'a')

segmentCount = 0

write_original = payloadRecon.write

def write_and_count(self, *args, **kwargs):

global segmentCount

segmentCount += 1

write_original(self, *args, **kwargs)

payloadRecon.write = write_and_count

但事实上,把事情说清楚可能是解决问题的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值