访问子字符串

切片是个好方法,但是它一次只能取得一个字段;如果还考虑字段的长度,struct.unpack可能更适合。
import struct

def fields(baseformat, theline, lastfield=False):
    # theline超出的长度也由这个base-format确定
    # (通过struct.calcsize计算确切的长度)
    numremain = len(theline) - struct.calcsize(baseformat)
    # 用合适的s或x字段完成格式,然后unpack
    format = "%s %d%s" % (baseformat, numremain, lastfield and "s" or "x")
    return struct.unpack(format, theline)  

利用缓存的方法:

import struct

def fields(baseformat, theline, lastfield=False, _cache={}):
    # 生成键并尝试获得缓存的格式字符串
    key = baseformat, len(theline), lastfield
    format = _cache.get(key)
    if format is None:
        # 没有缓存的格式字符串,创建并缓存之
        numremain = len(theline) - struct.calcsize(baseformat)
        _cache[key] = format = "%s %d%s" % (baseformat, numremain, lastfield and "s" or "x")
    return struct.unpack(format, theline)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值