美文网首页
python进阶:字符串和文本处理

python进阶:字符串和文本处理

作者: 天涯待归客 | 来源:发表于2017-05-26 15:56 被阅读886次

    字符串是一种重要的数据形式,有价值的程序都会涉及到对于字符串的处理。幸运的是,强大的python内置了很多函数,来帮助我们解析和处理字符串。本文会涉及到字符串编码,简单的字符串处理函数。

    字符串编码

    在 Python3 中,文本总是 Unicode, 由 str 类型进行表示,二进制数据使用 bytes 进行表示。不会出现python2种将 str 与 bytes 偷偷的混在一起的情况,使得两者的区别更加明显[1]。

    我们知道,计算机储存的都是二进制信息,二进制信息有很多种编码方式来表示字符,有的编码方式叫BIG-5,有的编码方式叫GBK,有的编码方式叫UTF-8,不一而足。

    在python3中,默认的编码方式是UTF-8。python内置了可以处理字符串的decode()函数和encode()函数,decode()函数将其它编码的字符串转化为UTF-8,encode()函数将UTF-8编码转化为其它编码[2]。

    拼接字符串

    使用+拼接少量字符串,形式简洁,速度很快。比如:

    >>> string_1 = "Hello"
    >>> string_2 = "World"
    >>> string = string_1 + string_2
    >>> print(string)
    HelloWorld
    

    对于已知值的字符串,可以依次打出其值并赋值给一个字符串变量,也可以实现字符串的连接。

    # 无需加号的连接
    >>> string_3 = "Hello" "World"
    >>> print(string_3)
    HelloWorld
    

    随着字符串数量的增多,字符串连接的效率会迅速降低[3]。这时就需要使用join()方法,它本质上是一个函数。join()是专属于字符串的一种方法,字符串后面只要加上一个点,就能够使用该方法。

    >>> parts = ['Is', 'Chicago', 'Not', 'Chicago?']
    # 用空格连接
    >>> ' '.join(parts)
    'Is Chicago Not Chicago?'
    # 用逗号连接
    >>> ','.join(parts)
    'Is,Chicago,Not,Chicago?'
    # 不使用任何字符,直接连接
    >>> ''.join(parts)
    'IsChicagoNotChicago?'
    

    多个需要连接的字符串,一般会放在列表里面。然后使用join()方法连接。注意,在','.join(parts)中,parts表示待连接的字符串,逗号意味着:每个字符串之间用逗号连接。

    拆分字符串

    字符串的分割需要用到split()方法,它也是python的内置函数,专门用于拆分字符串。函数split()只接受一个参数,这个参数决定了字符串应该在何处拆分。

    >>> line = 'Is Chicago Not Chicago?'
    # 用逗号分隔
    >>> parts = line.split(' ')
    >>> print(parts)
    ['Is', 'Chicago', 'Not', 'Chicago?']
    # 拆分和连接是互逆的,先拆分后连接,还是原来的字符串
    >>> ' '.join(line.split(' ')) == line
    True
    

    如果想在多个字符处分隔应该怎么办呢?聪明的你不难想到,多次使用split()方法,每次使用不同的字符。具体见下面的例子:

    现在我们还没有学到列表连接的方法,暂且使用+。和字符串的连接类似,用+连接列表也会有性能问题,这时需要用到append()方法,感兴趣的同学可以查阅相关资料。

    首尾字符过滤

    首尾字符过滤用strip()方法,strip()默认过滤掉空格' '和换行`\n``,也可以指定过滤的字符。具体可以看下面的例子:

    # 默认过滤首尾空格和换行符号
    >>> line = '  Hello, world!  \n'
    >>> line.strip()
    'Hello, world!'
    
    # 过滤掉'?'
    >>> line = 'Is Chicago Not Chicago?'
    >>> line.strip('?')
    'Is Chicago Not Chicago'
    

    字符的查找和替换

    查找的方法是find(),用法和上面的类似,具体用法请看下面的例子。

    >>> line = 'Hello, world!\n'
    >>> line.find('o')
    4
    

    123find()方法,从字符串的开头开始寻找目标字符,遇到第一个符合的字母就停止寻找,并返回该字符的序号。

    # 根据空格和字母c,拆分字符串line
    >>> line = 'Is Chicago Not Chicago?'
    >>> part_1 = line.split(' ')
    >>> print(part_1)
    ['Is', 'Chicago', 'Not', 'Chicago?']
    >>> part_2 = []
    >>> for index in part_1:
    ···     part_2 = part_2 + index.split('c')
    >>> print(part_2)
    ['Is', 'Chi', 'ago', 'Not', 'Chi', 'ago?']
    

    替换的方法是:replace(),基本的使用格式是:字符串.replace(参数1, 参数2),参数1表示要被替换的字符,参数2表示替换成的字符。具体见下面的例子:

    >>> line = 'Hello, world!\n'
    >>> line.replace('\n', '\r')
    'Hello, world!\n'
    
    # 一次性替换全部
    >>> line.replace('o', 'a')
    'Hella, warld!\n'
    

    replace()方法不是惰性的,它会把所有符合条件的字符都替换成目标字符。

    总结

    1. python3默认编码是UTF-8,其它编码转换成UTF-8需要使用decode()方法
    2. 少量拼接使用+,大量字符串拼接需要使用join()方法
    3. 拆分字符串需要使用split()方法,可以自定义拆分的基准字符
    4. strip()可以实现过滤首尾的特定字符,默认过滤空格和换行
    5. 字符的查找和替换分别使用find()replace()方法

    思考

    
    # 根据一种字符串分隔字符只需要用split()方法
    # 两次使用split()方法也可以实现按两种字符分隔字符串
    # 请编写一个函数,将任意一个字符串按任意两个字符分隔
    # 比如输入字符串:'Hello, welcome to congge python'
    # 分隔参数:空格和英文逗号
    # 输出:['Hello', 'welcome', 'to', 'congge', 'python']
    
    def my_split(string, character1, character2):
        array = string.split(character1)
        output = []
        for i in array:
            output = output + i.split(character2)
        return output
    

    参考资料

    1. 《Python 2与Python 3版本和编码的对比》原文链接:http://www.jb51.net/article/105518.htm
    2. 《Python字符串的编码与解码》原文链接:http://blog.csdn.net/qq_15437667/article/details/52719297
    3. 《合并拼接字符串》原文链接:http://python3-cookbook-zh.readthedocs.io/en/latest/c02/p14_combine_and_concatenate_strings.html

    扫一扫这个二维码,关注公众号:聪哥python,获取最新python3基础教程

    聪哥python

    相关文章

      网友评论

          本文标题:python进阶:字符串和文本处理

          本文链接:https://www.haomeiwen.com/subject/wddxfxtx.html