Python recipe(4):Substrings

代码先行:

div css xhtml xml Example Source Code Example Source Code [http://www.cnblogs.com/tomsheep/]
'''
Created on 2010-5-20

@author: lk
'''
import struct

def substrings1(str, cuts):
    return [str[i:j] for i,j in zip([0]+cuts, cuts)]

def substrings2(str, fmt):
    numer_rest = len(str)-struct.calcsize(fmt)
    format = "%s %dx"%(fmt, numer_rest)
    return struct.unpack(format, str)

if __name__ == '__main__':
    str = 'Hello, my name is Kang Liu, and my major is SE'
    cuts = [2,4,12,20,100]
    print substrings1(str, cuts)
    
    str2 = "Name:TomxxxAge:22 Foo!Foo!Foo!"
    fmt = "4s 1x 3s 3x 6s"
    print substrings2(str2, fmt)

以上代码改写自Python Cookbook 3-11

概述:

    给出两种取子字符串的方法:第一种比较naive,依赖下标做slicing;第二种借助python内建struct模块解析字符串

代码说明:

1. 第一种方法中有一个trick,zip([0]+cuts, cuts) 使得相邻下标两两组成tuple

2. struct模块用来将python类型解析为二进制(可看作字符流),或者反过来。这里使用的主要是struct.unpack函数,即从字符流解析出python类型。这里首先给出一个模板’4s 1x 3s 3x 6s’, s表示字符串,x表示无意义填充,所以该模板意为“4字符,后跟1填充,后跟3字符,后跟3填充,后跟6字符”,3. struct.calcsize函数计算一个模板匹配后的长度,如上述模板计算后长度应为17。

更多struct模块使用方法可见python手册,这里有一篇网文也可参考:

Python模块学习 ---- struct 数据格式转换

posted on 2010-05-20 23:43  tomsheep  阅读(375)  评论(0编辑  收藏  举报

导航