• Python基础——字符串


      Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ

      在Python中,字符串也是一种数据类型。相比其它数据类型,字符串算是比较复杂的。为何呢?因为字符串不仅包含英文字母,还包括各国的语言文字。既然字符串包含各国语言,因此字符串还涉及编码问题。

      在Python 3.x版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言。

      示例代码如下:

    1 #字符串包含中文
    2 >>>print('我爱祖国!I love my country!')
    3 我爱祖国!I love my country!

      字符串支持拼接语法。

    #拼接字符串
    >>>x = "Hello,"
    >>>y = 'world!'
    >>>x + y
    'Hello,world!'
    >>>print(x + y)
    Hello,world!

      在Python中,值被转换为字符串的两种机制:

      一、str(),它会把值转换为合理形式的字符串,方便用户理解;

      二、repr(),它会创建一个字符串,以合法的Python表达式的形式来表示值。

      对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符:

    1 #ord()和chr()
    2 >>> ord('A')
    3 65
    4 >>> ord('')
    5 20013
    6 >>> chr(66)
    7 'B'
    8 >>> chr(25991)
    9 ''

      如果知道字符的整数编码,还可以用十六进制这么写str:

    1 #十六进制——字符串编码
    2 >>> 'u4e2du6587'
    3 '中文'

      两种写法完全是等价的。

      由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。

      如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes

      Python对bytes类型的数据用带b前缀的单引号或双引号表示:

    1 #Bytes编码
    2 >>>s = b'ACV'
    3 >>>print(s)
    4 b'ACV'
    5 >>>s
    6 b'ACV'

      要注意区分'ABC'b'ABC',前者是str,后者虽然内容显示得和前者一样,但bytes的每个字符都只占用一个字节。 

      以Unicode表示的str通过encode()方法可以编码为指定的bytes,例如:

    1 #字符串编码之ASCII、UTF-8
    2 >>> 'ABC'.encode('ascii')
    3 b'ABC'
    4 >>> '中文'.encode('utf-8')
    5 b'xe4xb8xadxe6x96x87'
    6 >>> '中文'.encode('ascii')
    7 Traceback (most recent call last):
    8   File "<stdin>", line 1, in <module>
    9 UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

       需要注意的是,我们可以将str转换成任意编码的bytes。但是在转换含有中文的str时,不能转换成ascii编码的bytes。含有中文的str无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围,Python会报错。

      反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:

    #decode()用法
    1
    >>> b'ABC'.decode('ascii') 2 'ABC' 3 >>> b'xe4xb8xadxe6x96x87'.decode('utf-8') 4 '中文'

      要计算str包含多少个字符,可以用len()函数:

    1 >>> len('ABC')
    2 3
    3 >>> len('中文')
    4 2

      len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数

    1 >>> len(b'ABC')
    2 3
    3 >>> len(b'xe4xb8xadxe6x96x87')
    4 6
    5 >>> len('中文'.encode('utf-8'))
    6 6

      在操作字符串时,我们经常遇到str和bytes的互相转换。

      特别地,为了避免乱码问题,应当始终坚持使用UTF-8编码对str和bytes进行转换。

    字符串格式化

      最后一个常见的问题是如何输出格式化的字符串。我们经常会输出类似'亲爱的xxx你好!你xx月的话费是xx,余额是xx'之类的字符串,而xxx的内容都是根据变量变化的,所以,需要一种简便的格式化字符串的方式。

      c语言中可以采用%来控制输出的格式,python中也类似。

      示例代码如下:

    1 #字符串格式化(%)
    2 >>> 'Hello, %s' % 'world'
    3 'Hello, world'
    4 >>> 'Hi, %s, you have $%d.' % ('James', 1000000)
    5 'Hi, Michael, you have $1000000.'

      %运算符就是用来格式化字符串的

      在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。 

    常见的占位符
    占位符 替换内容
    %d 整数
    %f 浮点数
    %s 字符串
    %x 十六进制整数

      如果你不太确定应该用什么,%s永远起作用,它会把任何数据类型转换为字符串:

    1 >>> 'Age: %s. Gender: %s' % (25, True)
    2 'Age: 25. Gender: True'

      有读者会有疑问,那遇到字符串本身含有%,怎么办呢?

      这个简单,这要转义就OK拉。用%%来表示一个%

    1 #%转义
    2 >>> 'growth rate: %d %%' % 7
    3 'growth rate: 7 %'

      字符串格式化的另外一种方法:使用.format()

      它会用传入的参数依次替换字符串内的占位符{0}{1}……,不过这种方式写起来比%要麻烦得多。

      .format()语法如下:

    1 #.format语法
    2 >>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)
    3 'Hello, 小明, 成绩提升了 17.1%'

      字符串中既包含小写字母又包含大写字母,如何将大写字母转化为小写字母呢?

      在Python中,字符串中有lower()方法。

    #字符串lower()方法
    >>>x = "HelLO wOrLd!"
    >>>x.lower()
    'hello world!'

      字符串还提供了很多方法,比如find()、join()、replace()、split()、strip()、upper()、title()、lstrip()、rstrip()等等。其实,方法是为人类服务的,利用方法可以可以最大化地体现String功能的强大之处。

      find():在字符串中查找子串,并返回子串所在位置的最左端索引。

      join():连接序列中的元素。

      replace():返回某字符串中所有匹配项均被替换后的新字符串。

      split():将字符串分隔成序列。

      strip():返回去除两侧(不包括内部)空格的字符串。

      ……

      ……

    字符串方法
    方法 描述
    string.capitalize() 返回首字母大写的字符串的副本
    string.center() 返回一个长度为max(len(string),width)且其中String的副本居中的字符串,两侧使用fillchar(默认为空字符串)填充
    string.count(sub[,start[,end]]) 计算子字符串sub的出现次数,可将搜索范围限制为string[start,end]
    string.find(sub[,start[,end]]) 返回子字符串sub的第一个索引,如果不存在则返回-1,可以定义字符串的搜索范围为string[start:end]
    string.isalnum() 检查字符串是否由数字和字母字符组成
    string.isalpha() 检查字符串是否由字母字符组成
    string.isdigit() 检查字符串是否由数字组成
    string.islower() 检查字符串中所有基于实例的字母是否都为小写
    string.isspace() 检查字符串是否由空格组成
    string.istitle() 检查字符串中不基于实例的字母后面的基于实例的字符都是大写的,且其他的基于实例的字符都是小写的
    string.isupper() 检查是否所有的字符串中的基于实例的字符都是大写
    string.join(sequence) 返回其中sequence的字符串元素已用String连接的字符串
    string.lower() 返回一个字符串的副本,其中所有基于实例的字符都是小写
    string.replace(old,new[,max]) 返回字符串的副本,其中old的匹配项都被new替代,可选择最多替换max个
    string.split([sep[,maxsplit]]) 返回字符串中所有单词的列表,使用sep作为分隔符(若没有指定特别的分隔符,默认为空格),可使用maxsplit指定最大切分数
    string.strip([chars]) 返回字符串的副本,其中所有chars(默认空格)都从字符串的开头和结尾去除(默认为所有空白字符,如空格,tab和换行符)
    string.title() 返回字符串的副本,其中单词都以大写字母开头
    string.upper() 返回字符串的副本,其中所有基于实例的字符都为大写

      字符串方法还有很多很多,这里就不详细例举啦~~~

  • 相关阅读:
    sql server 镜像操作
    微信测试公众号的创见以及菜单创建
    linux安装redis步骤
    Mysql 查询表字段数量
    linux 链接mysql并覆盖数据
    linux (centos)增删改查用户命令
    CentOS修改用户密码方法
    https原理及其中所包含的对称加密、非对称加密、数字证书、数字签名
    com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. 问题解决方法
    设计模式(三):模板方法模式
  • 原文地址:https://www.cnblogs.com/SmallWZQ/p/8469042.html
Copyright © 2020-2023  润新知